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 NumberLiteral ? T : `${T}` * ``` * @example Accepting a `NumberLike` and returning a `number` * ``` * type IntoNumber = T extends NumberLiteral * ? ParseNumberLiteral * : T * ``` */ export type NumberLike = T extends NumberLiteral ? ParseNumberLiteral | T : `${T}` | T