]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(types): correct type inference of union event names (#12022)
author山吹色御守 <85992002+KazariEX@users.noreply.github.com>
Thu, 26 Sep 2024 09:00:05 +0000 (17:00 +0800)
committerGitHub <noreply@github.com>
Thu, 26 Sep 2024 09:00:05 +0000 (17:00 +0800)
packages/runtime-core/src/componentEmits.ts

index b1be1c9ed0dced3bdbe82e9a51abbafb0a6ec7ad..db52bc88c333e02176c4da3409ea89177879250d 100644 (file)
@@ -66,11 +66,23 @@ export type TypeEmitsToOptions<T extends ComponentTypeEmits> = {
   : {})
 
 type ParametersToFns<T extends any[]> = {
-  [K in T[0]]: K extends `${infer C}`
-    ? (...args: T extends [C, ...infer Args] ? Args : never) => any
+  [K in T[0]]: IsStringLiteral<K> extends true
+    ? (
+        ...args: T extends [e: infer E, ...args: infer P]
+          ? K extends E
+            ? P
+            : never
+          : never
+      ) => any
     : never
 }
 
+type IsStringLiteral<T> = T extends string
+  ? string extends T
+    ? false
+    : true
+  : false
+
 export type ShortEmitsToObject<E> =
   E extends Record<string, any[]>
     ? {