fix(types): return type of withDefaults should be readonly (#8601)

This commit is contained in:
zqran 2023-11-10 15:20:02 +08:00 committed by GitHub
parent 46e33744c8
commit f15debc01a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 2 deletions

View File

@ -110,6 +110,7 @@ describe('defineProps w/ generic type declaration + withDefaults', <T extends
defineProps<{ defineProps<{
n?: number n?: number
bool?: boolean bool?: boolean
s?: string
generic1?: T[] | { x: T } generic1?: T[] | { x: T }
generic2?: { x: T } generic2?: { x: T }
@ -128,6 +129,10 @@ describe('defineProps w/ generic type declaration + withDefaults', <T extends
) )
res.n + 1 res.n + 1
// @ts-expect-error should be readonly
res.n++
// @ts-expect-error should be readonly
res.s = ''
expectType<T[] | { x: T }>(res.generic1) expectType<T[] | { x: T }>(res.generic1)
expectType<{ x: T }>(res.generic2) expectType<{ x: T }>(res.generic2)

View File

@ -298,8 +298,8 @@ type PropsWithDefaults<
T, T,
Defaults extends InferDefaults<T>, Defaults extends InferDefaults<T>,
BKeys extends keyof T BKeys extends keyof T
> = Omit<T, keyof Defaults> & { > = Readonly<Omit<T, keyof Defaults>> & {
[K in keyof Defaults]-?: K extends keyof T readonly [K in keyof Defaults]-?: K extends keyof T
? Defaults[K] extends undefined ? Defaults[K] extends undefined
? T[K] ? T[K]
: NotUndefined<T[K]> : NotUndefined<T[K]>