]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(types): component instance inference without props (#2145)
authorAnthony Fu <anthonyfu117@hotmail.com>
Fri, 18 Sep 2020 04:13:47 +0000 (12:13 +0800)
committerGitHub <noreply@github.com>
Fri, 18 Sep 2020 04:13:47 +0000 (00:13 -0400)
packages/runtime-core/src/apiDefineComponent.ts
packages/runtime-core/src/componentOptions.ts
test-dts/component.test-d.ts

index ef08d3c6533894cfebfe0061ffa7af340d9909b5..9b85638c2dda4c77d78db024805191ab2b5a8a70 100644 (file)
@@ -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,
index 0ff710c36c61156e600ad1d40a129792ae73f6de..69f1f2afd1e47e849eafe9ac303094d6da066743 100644 (file)
@@ -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<
index 990e370518bc7d76626f0c363096a54e8e60f039..30b3b8e5f53eb19f6ecbe48c2a33ba174f8de5f8 100644 (file)
@@ -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', () => {