UNPKG

1.22 kBTypeScriptView Raw
1import { AnyRecord } from "./any-record";
2import { NonUndefinable } from "./non-undefinable";
3export type DeepModify<Type> =
4 | (Type extends AnyRecord
5 ? {
6 [Key in keyof Type]?: undefined extends {
7 [Key2 in keyof Type]: Key2;
8 }[Key]
9 ? NonUndefinable<Type[Key]> extends object
10 ? true | DeepModify<NonUndefinable<Type[Key]>>
11 : true
12 : Type[Key] extends object
13 ? true | DeepModify<Type[Key]>
14 : true;
15 }
16 : never)
17 | (Type extends Array<infer Values> ? Array<DeepModify<Values>> : never)
18 | (Type extends Promise<infer Value> ? Promise<DeepModify<Value>> : never)
19 | (Type extends Set<infer Values> ? Set<DeepModify<Values>> : never)
20 | (Type extends ReadonlySet<infer Values> ? ReadonlySet<DeepModify<Values>> : never)
21 | (Type extends WeakSet<infer Values> ? WeakSet<DeepModify<Values>> : never)
22 | (Type extends Map<infer Keys, infer Values> ? Map<Keys, DeepModify<Values>> : never)
23 | (Type extends ReadonlyMap<infer Keys, infer Values> ? ReadonlyMap<Keys, DeepModify<Values>> : never)
24 | (Type extends WeakMap<infer Keys, infer Values> ? WeakMap<Keys, DeepModify<Values>> : never);