]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(types): correctly infer `TypeEmits` with both tuple and function syntax (#11840)
author山吹色御守 <85992002+KazariEX@users.noreply.github.com>
Fri, 6 Sep 2024 08:10:56 +0000 (16:10 +0800)
committerGitHub <noreply@github.com>
Fri, 6 Sep 2024 08:10:56 +0000 (16:10 +0800)
close #11836

packages/runtime-core/src/componentEmits.ts

index dddb2e9453e34b80672401bfba6d9d8f84d65c8f..b1be1c9ed0dced3bdbe82e9a51abbafb0a6ec7ad 100644 (file)
@@ -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}`