Skip to content

Commit dad6738

Browse files
authored
fix(types): correctly infer TypeEmits with both tuple and function syntax (vuejs#11840)
close vuejs#11836
1 parent 632e163 commit dad6738

File tree

1 file changed

+7
-10
lines changed

1 file changed

+7
-10
lines changed

packages/runtime-core/src/componentEmits.ts

+7-10
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,13 @@ export type EmitsToProps<T extends EmitsOptions | ComponentTypeEmits> =
5757
}
5858
: {}
5959

60-
export type TypeEmitsToOptions<T extends ComponentTypeEmits> =
61-
T extends Record<string, any[]>
62-
? {
63-
[K in keyof T]: T[K] extends [...args: infer Args]
64-
? (...args: Args) => any
65-
: () => any
66-
}
67-
: T extends (...args: any[]) => any
68-
? ParametersToFns<OverloadParameters<T>>
69-
: {}
60+
export type TypeEmitsToOptions<T extends ComponentTypeEmits> = {
61+
[K in keyof T & string]: T[K] extends [...args: infer Args]
62+
? (...args: Args) => any
63+
: () => any
64+
} & (T extends (...args: any[]) => any
65+
? ParametersToFns<OverloadParameters<T>>
66+
: {})
7067

7168
type ParametersToFns<T extends any[]> = {
7269
[K in T[0]]: K extends `${infer C}`

0 commit comments

Comments
 (0)