feat(types): expose ComponentCustomOptions for declaring custom options

This commit is contained in:
Evan You 2020-04-17 09:41:36 -04:00
parent be21cfb1db
commit c0adb67c2e
3 changed files with 35 additions and 4 deletions

View File

@ -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<Props, D, C, M>, SFCInternalOptions {
>
extends LegacyOptions<Props, D, C, M>,
SFCInternalOptions,
ComponentCustomOptions {
setup?: (
this: void,
props: Props,

View File

@ -189,8 +189,9 @@ export {
export {
ComponentOptions,
ComponentOptionsWithoutProps,
ComponentOptionsWithObjectProps as ComponentOptionsWithProps,
ComponentOptionsWithArrayProps
ComponentOptionsWithObjectProps,
ComponentOptionsWithArrayProps,
ComponentCustomOptions
} from './componentOptions'
export {
ComponentPublicInstance,

View File

@ -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<number>(n)
},
methods: {
aMethod() {
expectError(this.notExisting)