Forráskód Böngészése

feat(types): expose ComponentCustomOptions for declaring custom options

Evan You 6 éve
szülő
commit
c0adb67c2e

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

+ 3 - 2
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,

+ 10 - 1
test-dts/componentCustomProperties.test-d.ts → 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<number>(n)
+  },
+
   methods: {
     aMethod() {
       expectError(this.notExisting)