From: Evan You Date: Fri, 17 Apr 2020 13:41:36 +0000 (-0400) Subject: feat(types): expose ComponentCustomOptions for declaring custom options X-Git-Tag: v3.0.0-beta.2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c0adb67c2e10d07af74304accbc1c79d19f6c196;p=thirdparty%2Fvuejs%2Fcore.git feat(types): expose ComponentCustomOptions for declaring custom options --- diff --git a/packages/runtime-core/src/componentOptions.ts b/packages/runtime-core/src/componentOptions.ts index 39087e8c31..40c861cbdc 100644 --- a/packages/runtime-core/src/componentOptions.ts +++ b/packages/runtime-core/src/componentOptions.ts @@ -51,6 +51,24 @@ import { Directive } from './directives' import { ComponentPublicInstance } from './componentProxy' import { warn } from './warning' +/** + * Interface for declaring custom options. + * + * @example + * ```ts + * declare module '@vue/runtime-core' { + * interface ComponentCustomOptions { + * beforeRouteUpdate?( + * to: Route, + * from: Route, + * next: () => void + * ): void + * } + * } + * ``` + */ +export interface ComponentCustomOptions {} + export interface ComponentOptionsBase< Props, RawBindings, @@ -59,7 +77,10 @@ export interface ComponentOptionsBase< M extends MethodOptions, E extends EmitsOptions, EE extends string = string -> extends LegacyOptions, SFCInternalOptions { +> + extends LegacyOptions, + SFCInternalOptions, + ComponentCustomOptions { setup?: ( this: void, props: Props, diff --git a/packages/runtime-core/src/index.ts b/packages/runtime-core/src/index.ts index f4273cc37c..316e1c7df6 100644 --- a/packages/runtime-core/src/index.ts +++ b/packages/runtime-core/src/index.ts @@ -189,8 +189,9 @@ export { export { ComponentOptions, ComponentOptionsWithoutProps, - ComponentOptionsWithObjectProps as ComponentOptionsWithProps, - ComponentOptionsWithArrayProps + ComponentOptionsWithObjectProps, + ComponentOptionsWithArrayProps, + ComponentCustomOptions } from './componentOptions' export { ComponentPublicInstance, diff --git a/test-dts/componentCustomProperties.test-d.ts b/test-dts/componentTypeExtensions.test-d.ts similarity index 71% rename from test-dts/componentCustomProperties.test-d.ts rename to test-dts/componentTypeExtensions.test-d.ts index 60267c6b4c..5066f0b971 100644 --- a/test-dts/componentCustomProperties.test-d.ts +++ b/test-dts/componentTypeExtensions.test-d.ts @@ -1,7 +1,11 @@ -import { expectError } from 'tsd' +import { expectError, expectType } from 'tsd' import { defineComponent } from './index' declare module '@vue/runtime-core' { + interface ComponentCustomOptions { + test?(n: number): void + } + interface ComponentCustomProperties { state: 'stopped' | 'running' } @@ -9,6 +13,11 @@ declare module '@vue/runtime-core' { export const Custom = defineComponent({ data: () => ({ counter: 0 }), + + test(n) { + expectType(n) + }, + methods: { aMethod() { expectError(this.notExisting)