Allow usage of tupels of arbitrary length with DeepPartial (#15947)

This commit is contained in:
Nicola Krumschmidt
2022-10-12 20:17:08 +02:00
committed by GitHub
parent 08db8fea5d
commit 215a47c19b

View File

@@ -1,16 +1,12 @@
type Primitive = undefined | null | string | number | boolean | bigint | symbol;
type Builtin = Primitive | Date | Error | RegExp | ((...args: any[]) => unknown);
type Tuple =
| [unknown]
| [unknown, unknown]
| [unknown, unknown, unknown]
| [unknown, unknown, unknown, unknown]
| [unknown, unknown, unknown, unknown, unknown];
export type DeepPartial<T> = T extends Builtin
? T
: T extends Tuple
? { [K in keyof T]?: DeepPartial<T[K]> }
: T extends []
? []
: T extends [infer U, ...infer R]
? [DeepPartial<U>, ...DeepPartial<R>]
: T extends Array<infer U>
? Array<DeepPartial<U>>
: T extends ReadonlyArray<infer U>