Skip to content

Commit 0600862

Browse files
committed
types(defineProps): avoid never props becoming boolean flags
1 parent 5cf0097 commit 0600862

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

packages-private/dts-test/setupHelpers.test-d.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,16 @@ describe('defineProps w/ type declaration', () => {
3333
expectType<boolean>(props.boolAndUndefined)
3434
})
3535

36+
describe('defineProps w/ never prop', () => {
37+
const props = defineProps<{
38+
foo?: never
39+
bar: number
40+
}>()
41+
42+
expectType<never | undefined>(props.foo)
43+
expectType<number>(props.bar)
44+
})
45+
3646
describe('defineProps w/ generics', () => {
3747
function test<T extends boolean>() {
3848
const props = defineProps<{ foo: T; bar: string; x?: boolean }>()

packages/runtime-core/src/apiSetupHelpers.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,9 @@ export type DefineProps<T, BKeys extends keyof T> = Readonly<T> & {
9999

100100
type BooleanKey<T, K extends keyof T = keyof T> = K extends any
101101
? [T[K]] extends [boolean | undefined]
102-
? K
102+
? boolean extends T[K]
103+
? K
104+
: never
103105
: never
104106
: never
105107

0 commit comments

Comments
 (0)