Skip to content

Commit 7c8f457

Browse files
authored
fix(types): fix defineComponent inference to Component (#5949)
1 parent 3e2850f commit 7c8f457

File tree

3 files changed

+87
-5
lines changed

3 files changed

+87
-5
lines changed

packages/runtime-core/src/apiDefineComponent.ts

+69-3
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,29 @@ export function defineComponent<
111111
E extends EmitsOptions = EmitsOptions,
112112
EE extends string = string,
113113
Provide extends ComponentProvideOptions = ComponentProvideOptions,
114-
Options extends {} = {}
114+
Options extends ComponentOptionsWithoutProps<
115+
Props,
116+
RawBindings,
117+
D,
118+
C,
119+
M,
120+
Mixin,
121+
Extends,
122+
E,
123+
EE,
124+
Provide
125+
> = ComponentOptionsWithoutProps<
126+
Props,
127+
RawBindings,
128+
D,
129+
C,
130+
M,
131+
Mixin,
132+
Extends,
133+
E,
134+
EE,
135+
Provide
136+
>
115137
>(
116138
options: Options &
117139
ComponentOptionsWithoutProps<
@@ -154,7 +176,29 @@ export function defineComponent<
154176
E extends EmitsOptions = Record<string, any>,
155177
EE extends string = string,
156178
Provide extends ComponentProvideOptions = ComponentProvideOptions,
157-
Options extends {} = {}
179+
Options extends ComponentOptionsWithArrayProps<
180+
PropNames,
181+
RawBindings,
182+
D,
183+
C,
184+
M,
185+
Mixin,
186+
Extends,
187+
E,
188+
EE,
189+
Provide
190+
> = ComponentOptionsWithArrayProps<
191+
PropNames,
192+
RawBindings,
193+
D,
194+
C,
195+
M,
196+
Mixin,
197+
Extends,
198+
E,
199+
EE,
200+
Provide
201+
>
158202
>(
159203
options: Options &
160204
ComponentOptionsWithArrayProps<
@@ -198,7 +242,29 @@ export function defineComponent<
198242
E extends EmitsOptions = Record<string, any>,
199243
EE extends string = string,
200244
Provide extends ComponentProvideOptions = ComponentProvideOptions,
201-
Options extends {} = {}
245+
Options extends ComponentOptionsWithObjectProps<
246+
PropsOptions,
247+
RawBindings,
248+
D,
249+
C,
250+
M,
251+
Mixin,
252+
Extends,
253+
E,
254+
EE,
255+
Provide
256+
> = ComponentOptionsWithObjectProps<
257+
PropsOptions,
258+
RawBindings,
259+
D,
260+
C,
261+
M,
262+
Mixin,
263+
Extends,
264+
E,
265+
EE,
266+
Provide
267+
>
202268
>(
203269
options: Options &
204270
ComponentOptionsWithObjectProps<

test-dts/defineComponent.test-d.tsx

+16-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {
22
describe,
3+
test,
34
Component,
45
defineComponent,
56
PropType,
@@ -1045,7 +1046,7 @@ describe('emits', () => {
10451046
})
10461047

10471048
describe('componentOptions setup should be `SetupContext`', () => {
1048-
expect<ComponentOptions['setup']>(
1049+
expectType<ComponentOptions['setup']>(
10491050
{} as (props: Record<string, any>, ctx: SetupContext) => any
10501051
)
10511052
})
@@ -1141,6 +1142,20 @@ describe('async setup', () => {
11411142
vm.a = 2
11421143
})
11431144

1145+
// #5948
1146+
describe('DefineComponent should infer correct types when assigning to Component', () => {
1147+
let component: Component
1148+
component = defineComponent({
1149+
setup(_, { attrs, slots }) {
1150+
// @ts-expect-error should not be any
1151+
expectType<[]>(attrs)
1152+
// @ts-expect-error should not be any
1153+
expectType<[]>(slots)
1154+
}
1155+
})
1156+
expectType<Component>(component)
1157+
})
1158+
11441159
// check if defineComponent can be exported
11451160
export default {
11461161
// function components

test-dts/index.d.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
export * from '@vue/runtime-dom'
55

66
export function describe(_name: string, _fn: () => void): void
7+
export function test(_name: string, _fn: () => any): void
78

89
export function expectType<T>(value: T): void
910
export function expectError<T>(value: T): void
@@ -15,4 +16,4 @@ export type IsUnion<T, U extends T = T> = (
1516
? false
1617
: true
1718

18-
export type IsAny<T> = 0 extends (1 & T) ? true : false
19+
export type IsAny<T> = 0 extends 1 & T ? true : false

0 commit comments

Comments
 (0)