type-plus
Version:
Provides additional types for TypeScript.
53 lines • 1.54 kB
TypeScript
import type { IsAny } from '../any/any_type.js';
/**
* Check if the type `T` is exactly `undefined`.
*
* ```ts
* type R = UndefinedType<undefined> // undefined
*
* type R = UndefinedType<never> // never
* type R = UndefinedType<unknown> // never
* type R = UndefinedType<string | boolean> // never
* ```
*/
export type UndefinedType<T, Then = T, Else = never> = IsAny<T, Else, [
T,
undefined
] extends [undefined, T] ? Then : Else>;
/**
* Is the type `T` exactly `undefined`.
*
* ```ts
* type R = IsUndefined<undefined> // true
*
* type R = IsUndefined<never> // false
* type R = IsUndefined<unknown> // false
* type R = IsUndefined<string | boolean> // false
* ```
*/
export type IsUndefined<T, Then = true, Else = false> = UndefinedType<T, Then, Else>;
/**
* Check if the type `T` is not `undefined`.
*
* ```ts
* type R = NotUndefinedType<undefined> // never
*
* type R = NotUndefinedType<never> // never
* type R = NotUndefinedType<unknown> // unknown
* type R = NotUndefinedType<string | boolean> // string | boolean
* ```
*/
export type NotUndefinedType<T, Then = T, Else = never> = UndefinedType<T, Else, Then>;
/**
* Is the type `T` not `undefined`.
*
* ```ts
* type R = IsNotUndefined<undefined> // false
*
* type R = IsNotUndefined<never> // true
* type R = IsNotUndefined<unknown> // true
* type R = IsNotUndefined<string | boolean> // true
* ```
*/
export type IsNotUndefined<T, Then = true, Else = false> = UndefinedType<T, Else, Then>;
//# sourceMappingURL=undefined_type.d.ts.map