mirror of https://github.com/vuejs/core.git
fix(types): correctly infer `TypeEmits` with both tuple and function syntax (#11840)
close #11836
This commit is contained in:
parent
632e163a41
commit
dad6738099
|
@ -57,16 +57,13 @@ export type EmitsToProps<T extends EmitsOptions | ComponentTypeEmits> =
|
|||
}
|
||||
: {}
|
||||
|
||||
export type TypeEmitsToOptions<T extends ComponentTypeEmits> =
|
||||
T extends Record<string, any[]>
|
||||
? {
|
||||
[K in keyof T]: T[K] extends [...args: infer Args]
|
||||
? (...args: Args) => any
|
||||
: () => any
|
||||
}
|
||||
: T extends (...args: any[]) => any
|
||||
? ParametersToFns<OverloadParameters<T>>
|
||||
: {}
|
||||
export type TypeEmitsToOptions<T extends ComponentTypeEmits> = {
|
||||
[K in keyof T & string]: T[K] extends [...args: infer Args]
|
||||
? (...args: Args) => any
|
||||
: () => any
|
||||
} & (T extends (...args: any[]) => any
|
||||
? ParametersToFns<OverloadParameters<T>>
|
||||
: {})
|
||||
|
||||
type ParametersToFns<T extends any[]> = {
|
||||
[K in T[0]]: K extends `${infer C}`
|
||||
|
|
Loading…
Reference in New Issue