test()
})
-describe('defineProps w/ type declaration + withDefaults', () => {
+describe('defineProps w/ type declaration + withDefaults', <T extends
+ string>() => {
const res = withDefaults(
defineProps<{
number?: number
z?: string
bool?: boolean
boolAndUndefined: boolean | undefined
+ foo?: T
}>(),
{
number: 123,
genStr: () => '',
y: undefined,
z: 'string',
+ foo: '' as any,
},
)
expectType<string | undefined>(res.x)
expectType<string | undefined>(res.y)
expectType<string>(res.z)
+ expectType<T>(res.foo)
expectType<boolean>(res.bool)
expectType<boolean>(res.boolAndUndefined)
import {
+ type IfAny,
type LooseRequired,
type Prettify,
type UnionToIntersection,
> = Readonly<MappedOmit<T, keyof Defaults>> & {
readonly [K in keyof Defaults]-?: K extends keyof T
? Defaults[K] extends undefined
- ? T[K]
+ ? IfAny<Defaults[K], NotUndefined<T[K]>, T[K]>
: NotUndefined<T[K]>
: never
} & {