From 06008628a2348f2825d6231cbe73ea18011bc967 Mon Sep 17 00:00:00 2001 From: daiwei Date: Thu, 6 Nov 2025 11:51:35 +0800 Subject: [PATCH 1/2] types(defineProps): avoid never props becoming boolean flags --- packages-private/dts-test/setupHelpers.test-d.ts | 10 ++++++++++ packages/runtime-core/src/apiSetupHelpers.ts | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages-private/dts-test/setupHelpers.test-d.ts b/packages-private/dts-test/setupHelpers.test-d.ts index 656f1da79f2..0cf713ab9b1 100644 --- a/packages-private/dts-test/setupHelpers.test-d.ts +++ b/packages-private/dts-test/setupHelpers.test-d.ts @@ -33,6 +33,16 @@ describe('defineProps w/ type declaration', () => { expectType(props.boolAndUndefined) }) +describe('defineProps w/ never prop', () => { + const props = defineProps<{ + foo?: never + bar: number + }>() + + expectType(props.foo) + expectType(props.bar) +}) + describe('defineProps w/ generics', () => { function test() { const props = defineProps<{ foo: T; bar: string; x?: boolean }>() diff --git a/packages/runtime-core/src/apiSetupHelpers.ts b/packages/runtime-core/src/apiSetupHelpers.ts index 67e1d550387..7515a984610 100644 --- a/packages/runtime-core/src/apiSetupHelpers.ts +++ b/packages/runtime-core/src/apiSetupHelpers.ts @@ -99,7 +99,9 @@ export type DefineProps = Readonly & { type BooleanKey = K extends any ? [T[K]] extends [boolean | undefined] - ? K + ? boolean extends T[K] + ? K + : never : never : never From 6079bdbf0ca036e21c642bc8b22d080df9a7c60e Mon Sep 17 00:00:00 2001 From: daiwei Date: Sat, 8 Nov 2025 20:04:25 +0800 Subject: [PATCH 2/2] chore: update --- packages/runtime-core/src/apiSetupHelpers.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/runtime-core/src/apiSetupHelpers.ts b/packages/runtime-core/src/apiSetupHelpers.ts index 7515a984610..250f4f5fea0 100644 --- a/packages/runtime-core/src/apiSetupHelpers.ts +++ b/packages/runtime-core/src/apiSetupHelpers.ts @@ -98,10 +98,10 @@ export type DefineProps = Readonly & { } type BooleanKey = K extends any - ? [T[K]] extends [boolean | undefined] - ? boolean extends T[K] - ? K - : never + ? T[K] extends boolean | undefined + ? T[K] extends never | undefined + ? never + : K : never : never