1 | export type PropOr<
|
2 | T extends object | undefined,
|
3 | P extends string | symbol | number,
|
4 | D = undefined
|
5 | > = T extends Partial<Record<P, unknown>> ? T[P] : D
|
6 |
|
7 | export type UnionKeys<T> = T extends unknown ? keyof T : never
|
8 |
|
9 | type AddOptionalKeys<K extends PropertyKey> = { readonly [P in K]?: undefined }
|
10 |
|
11 |
|
12 |
|
13 |
|
14 | export type Deunionize<
|
15 | B extends object | undefined,
|
16 | T extends B = B
|
17 | > = T extends object ? T & AddOptionalKeys<Exclude<UnionKeys<B>, keyof T>> : T
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 | export function deunionize<T extends object | undefined>(t: T) {
|
25 | return t as Deunionize<T>
|
26 | }
|