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..250f4f5fea0 100644 --- a/packages/runtime-core/src/apiSetupHelpers.ts +++ b/packages/runtime-core/src/apiSetupHelpers.ts @@ -98,8 +98,10 @@ export type DefineProps = Readonly & { } type BooleanKey = K extends any - ? [T[K]] extends [boolean | undefined] - ? K + ? T[K] extends boolean | undefined + ? T[K] extends never | undefined + ? never + : K : never : never