UNPKG

type-plus

Version:
38 lines (35 loc) 891 B
/** * 🌪️ *filter* * * Filter the type `T` to ensure it is a union. * * @example * ```ts * type R = IsUnion<'a' | 'b'> // 'a' | 'b' * type R = IsUnion<boolean> // boolean * type R = IsUnion<number> // never * ``` */ export type UnionType<T, Then = T, Else = never> = UnionType.Device<T, Then, Else> /** * 🎭 *validate* * * Validate the type `T` is a union. * * @author Nurbol Alpysbayev * @see https://stackoverflow.com/questions/53953814/typescript-check-if-a-type-is-a-union * * @example * ```ts * type R = IsUnion<'a' | 'b'> // true * type R = IsUnion<boolean> // true * type R = IsUnion<number> // false * ``` */ export type IsUnion<T, Then = true, Else = false> = UnionType.Device<T, Then, Else> export namespace UnionType { export type Device<T, Then, Else, U = T> = (T extends unknown ? (U extends T ? 1 : 2) : never) extends 1 ? Else : Then }