UNPKG

838 BPlain TextView Raw
1export 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
7export type UnionKeys<T> = T extends unknown ? keyof T : never
8
9type AddOptionalKeys<K extends PropertyKey> = { readonly [P in K]?: undefined }
10
11/**
12 * @see https://millsp.github.io/ts-toolbelt/modules/union_strict.html
13 */
14export 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 * Expose properties from all union variants.
21 * @see https://github.com/telegraf/telegraf/issues/1388#issuecomment-791573609
22 * @see https://millsp.github.io/ts-toolbelt/modules/union_strict.html
23 */
24export function deunionize<T extends object | undefined>(t: T) {
25 return t as Deunionize<T>
26}