type-plus
Version:
Provides additional types for TypeScript.
33 lines • 925 B
TypeScript
/**
* 🌪️ *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 declare namespace UnionType {
type Device<T, Then, Else, U = T> = (T extends unknown ? (U extends T ? 1 : 2) : never) extends 1 ? Else : Then;
}
//# sourceMappingURL=union.d.ts.map