]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(types): correct type inference of all-optional props (#11644)
author山吹色御守 <85992002+KazariEX@users.noreply.github.com>
Fri, 20 Sep 2024 12:36:57 +0000 (20:36 +0800)
committerGitHub <noreply@github.com>
Fri, 20 Sep 2024 12:36:57 +0000 (20:36 +0800)
fix #11733
fix vuejs/language-tools#4704

packages/runtime-core/src/apiDefineComponent.ts
packages/runtime-core/src/componentProps.ts

index 138f185fca2bce89e6a58cf6da049db3cf0ffb70..3748fc81c63929fbed5ee20a565e6086580f182a 100644 (file)
@@ -209,11 +209,13 @@ export function defineComponent<
     ? TypeEmitsToOptions<TypeEmits>
     : RuntimeEmitsOptions,
   InferredProps = unknown extends TypeProps
-    ? string extends RuntimePropsKeys
-      ? ComponentObjectPropsOptions extends RuntimePropsOptions
-        ? {}
-        : ExtractPropTypes<RuntimePropsOptions>
-      : { [key in RuntimePropsKeys]?: any }
+    ? keyof TypeProps extends never
+      ? string extends RuntimePropsKeys
+        ? ComponentObjectPropsOptions extends RuntimePropsOptions
+          ? {}
+          : ExtractPropTypes<RuntimePropsOptions>
+        : { [key in RuntimePropsKeys]?: any }
+      : TypeProps
     : TypeProps,
   TypeRefs extends Record<string, unknown> = {},
   TypeEl extends Element = any,
index c864ba15535c803cefd6e40ad55d35191d7deb88..e07fb476788562153f8543767125734d6b42c6db 100644 (file)
@@ -125,7 +125,9 @@ type InferPropType<T, NullAsAny = true> = [T] extends [null]
               : InferPropType<U, false>
             : [T] extends [Prop<infer V, infer D>]
               ? unknown extends V
-                ? IfAny<V, V, D>
+                ? keyof V extends never
+                  ? IfAny<V, V, D>
+                  : V
                 : V
               : T