]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
types(defineProps): avoid never props becoming boolean flags edison/fix/14056 14059/head
authordaiwei <daiwei521@126.com>
Thu, 6 Nov 2025 03:51:35 +0000 (11:51 +0800)
committerdaiwei <daiwei521@126.com>
Thu, 6 Nov 2025 03:51:35 +0000 (11:51 +0800)
packages-private/dts-test/setupHelpers.test-d.ts
packages/runtime-core/src/apiSetupHelpers.ts

index 656f1da79f2eb7c95a6977f5bb77588e8accf8e7..0cf713ab9b127240be196a882d2849c42f9ca36a 100644 (file)
@@ -33,6 +33,16 @@ describe('defineProps w/ type declaration', () => {
   expectType<boolean>(props.boolAndUndefined)
 })
 
+describe('defineProps w/ never prop', () => {
+  const props = defineProps<{
+    foo?: never
+    bar: number
+  }>()
+
+  expectType<never | undefined>(props.foo)
+  expectType<number>(props.bar)
+})
+
 describe('defineProps w/ generics', () => {
   function test<T extends boolean>() {
     const props = defineProps<{ foo: T; bar: string; x?: boolean }>()
index 67e1d550387b4a5e8af55b4899ddfb162d15816e..7515a9846105a8a74bac8dde05ff192bb7237a6c 100644 (file)
@@ -99,7 +99,9 @@ export type DefineProps<T, BKeys extends keyof T> = Readonly<T> & {
 
 type BooleanKey<T, K extends keyof T = keyof T> = K extends any
   ? [T[K]] extends [boolean | undefined]
-    ? K
+    ? boolean extends T[K]
+      ? K
+      : never
     : never
   : never