type-plus
Version:
Provides additional types for TypeScript.
50 lines • 1.44 kB
TypeScript
import type { IsAnyOrNever } from '../mix_types/any_or_never_type.js';
/**
* Check if the type `T` is exactly `symbol`.
*
* ```ts
* type R = SymbolType<symbol> // symbol
*
* type R = SymbolType<never> // never
* type R = SymbolType<unknown> // never
* type R = SymbolType<symbol | boolean> // never
* ```
*/
export type SymbolType<T, Then = T, Else = never> = IsAnyOrNever<T, Else, [T] extends [symbol] ? Then : Else>;
/**
* Is the type `T` exactly `symbol`.
*
* ```ts
* type R = IsSymbol<symbol> // true
*
* type R = IsSymbol<never> // false
* type R = IsSymbol<unknown> // false
* type R = IsSymbol<symbol | boolean> // false
* ```
*/
export type IsSymbol<T, Then = true, Else = false> = SymbolType<T, Then, Else>;
/**
* Check if the type `T` is not `symbol`.
*
* ```ts
* type R = NotSymbolType<symbol> // never
*
* type R = NotSymbolType<never> // never
* type R = NotSymbolType<unknown> // unknown
* type R = NotSymbolType<symbol | boolean> // symbol | boolean
* ```
*/
export type NotSymbolType<T, Then = T, Else = never> = SymbolType<T, Else, Then>;
/**
* Is the type `T` not `symbol`.
*
* ```ts
* type R = IsNotSymbol<symbol> // false
*
* type R = IsNotSymbol<never> // true
* type R = IsNotSymbol<unknown> // true
* type R = IsNotSymbol<symbol | boolean> // true
* ```
*/
export type IsNotSymbol<T, Then = true, Else = false> = SymbolType<T, Else, Then>;
//# sourceMappingURL=symbol_type.d.ts.map