Bladeren bron

fix(types): correct type inference of all-optional props (#11644)

fix #11733
fix vuejs/language-tools#4704
山吹色御守 1 jaar geleden
bovenliggende
commit
9eca65ee98
2 gewijzigde bestanden met toevoegingen van 10 en 6 verwijderingen
  1. 7 5
      packages/runtime-core/src/apiDefineComponent.ts
  2. 3 1
      packages/runtime-core/src/componentProps.ts

+ 7 - 5
packages/runtime-core/src/apiDefineComponent.ts

@@ -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,

+ 3 - 1
packages/runtime-core/src/componentProps.ts

@@ -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