Просмотр исходного кода

fix(types): component instance inference without props (#2145)

Anthony Fu 5 лет назад
Родитель
Сommit
57bdaa2220

+ 2 - 2
packages/runtime-core/src/apiDefineComponent.ts

@@ -94,8 +94,8 @@ export function defineComponent<
   Props = {},
   RawBindings = {},
   D = {},
-  C extends ComputedOptions = ComputedOptions,
-  M extends MethodOptions = MethodOptions,
+  C extends ComputedOptions = {},
+  M extends MethodOptions = {},
   Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,
   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
   E extends EmitsOptions = EmitsOptions,

+ 3 - 16
packages/runtime-core/src/componentOptions.ts

@@ -166,8 +166,7 @@ export type ComponentOptionsWithoutProps<
   Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,
   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
   E extends EmitsOptions = EmitsOptions,
-  EE extends string = string,
-  Defaults = {}
+  EE extends string = string
 > = ComponentOptionsBase<
   Props,
   RawBindings,
@@ -178,23 +177,11 @@ export type ComponentOptionsWithoutProps<
   Extends,
   E,
   EE,
-  Defaults
+  {}
 > & {
   props?: undefined
 } & ThisType<
-    CreateComponentPublicInstance<
-      {},
-      RawBindings,
-      D,
-      C,
-      M,
-      Mixin,
-      Extends,
-      E,
-      Readonly<Props>,
-      Defaults,
-      false
-    >
+    CreateComponentPublicInstance<{}, RawBindings, D, C, M, Mixin, Extends, E>
   >
 
 export type ComponentOptionsWithArrayProps<

+ 12 - 0
test-dts/component.test-d.ts

@@ -190,6 +190,12 @@ describe('object props', () => {
     expectType<ExpectedProps['ggg']>(setup.setupProps.ggg)
     expectType<ExpectedProps['ffff']>(setup.setupProps.ffff)
     expectType<ExpectedProps['validated']>(setup.setupProps.validated)
+
+    // instance
+    const instance = new MyComponent()
+    expectType<number>(instance.setupA)
+    // @ts-expect-error
+    instance.notExist
   })
 
   describe('options', () => {
@@ -356,6 +362,12 @@ describe('no props', () => {
 
     expectType<number>(rawBindings.setupA)
     expectType<number>(setup.setupA)
+
+    // instance
+    const instance = new MyComponent()
+    expectType<number>(instance.setupA)
+    // @ts-expect-error
+    instance.notExist
   })
 
   describe('options', () => {