UNPKG

@cuppachino/type-space

Version:

A collection of type utilities for TypeScript.

24 lines (23 loc) 910 B
import type { NumberLiteral } from './number-literal'; import type { ParseNumberLiteral } from './parse-number-literal'; /** * Coerce either a `number` or a `NumberLiteral` into a union between the two. * * @remarks This is useful for when you want to accept a `number` or a `NumberLiteral` but you want to choose which one to use later. * @example * ``` * type A = NumberLike<1> // 1 | "1" * ``` * @example Accepting a `NumberLike` and returning a `NumberLiteral` * ``` * type IntoNumberLiteral<T extends number | NumberLiteral> = * T extends NumberLiteral ? T : `${T}` * ``` * @example Accepting a `NumberLike` and returning a `number` * ``` * type IntoNumber<T extends number | NumberLiteral> = T extends NumberLiteral * ? ParseNumberLiteral<T> * : T * ``` */ export type NumberLike<T extends number | NumberLiteral> = T extends NumberLiteral ? ParseNumberLiteral<T> | T : `${T}` | T;