@@ -61,15 +61,7 @@ export function defineProps<
6161 PP extends ComponentObjectPropsOptions = ComponentObjectPropsOptions
6262> ( props : PP ) : Prettify < Readonly < ExtractPropTypes < PP > > >
6363// overload 3: typed-based declaration
64- export function defineProps < TypeProps > ( ) : Prettify <
65- Readonly <
66- Omit < TypeProps , BooleanKey < TypeProps > > & {
67- [ K in keyof Pick < TypeProps , BooleanKey < TypeProps > > ] -?: NotUndefined <
68- TypeProps [ K ]
69- >
70- }
71- >
72- >
64+ export function defineProps < TypeProps > ( ) : ResolveProps < TypeProps >
7365// implementation
7466export function defineProps ( ) {
7567 if ( __DEV__ ) {
@@ -78,6 +70,20 @@ export function defineProps() {
7870 return null as any
7971}
8072
73+ type ResolveProps < T , BooleanKeys extends keyof T = BooleanKey < T > > = Prettify <
74+ Readonly <
75+ T & {
76+ [ K in BooleanKeys ] -?: boolean
77+ }
78+ >
79+ >
80+
81+ type BooleanKey < T , K extends keyof T = keyof T > = K extends any
82+ ? [ T [ K ] ] extends [ boolean | undefined ]
83+ ? K
84+ : never
85+ : never
86+
8187/**
8288 * Vue `<script setup>` compiler macro for declaring a component's emitted
8389 * events. The expected argument is the same as the component `emits` option.
@@ -139,12 +145,6 @@ export function defineExpose<
139145
140146type NotUndefined < T > = T extends undefined ? never : T
141147
142- type BooleanKey < T , K extends keyof T = keyof T > = K extends any
143- ? [ T [ K ] ] extends [ boolean | undefined ]
144- ? K
145- : never
146- : never
147-
148148type InferDefaults < T > = {
149149 [ K in keyof T ] ?: InferDefault < T , NotUndefined < T [ K ] > >
150150}
0 commit comments