@@ -61,15 +61,7 @@ export function defineProps<
61
61
PP extends ComponentObjectPropsOptions = ComponentObjectPropsOptions
62
62
> ( props : PP ) : Prettify < Readonly < ExtractPropTypes < PP > > >
63
63
// 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 >
73
65
// implementation
74
66
export function defineProps ( ) {
75
67
if ( __DEV__ ) {
@@ -78,6 +70,20 @@ export function defineProps() {
78
70
return null as any
79
71
}
80
72
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
+
81
87
/**
82
88
* Vue `<script setup>` compiler macro for declaring a component's emitted
83
89
* events. The expected argument is the same as the component `emits` option.
@@ -139,12 +145,6 @@ export function defineExpose<
139
145
140
146
type NotUndefined < T > = T extends undefined ? never : T
141
147
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
-
148
148
type InferDefaults < T > = {
149
149
[ K in keyof T ] ?: InferDefault < T , NotUndefined < T [ K ] > >
150
150
}
0 commit comments