UNPKG

hkt-toolbelt

Version:

Functional and composable type utilities

67 lines (66 loc) 1.85 kB
import { Kind, Number as Number_, Type } from '..'; type _$stringToDigitMap = { '0': 0; '1': 1; '2': 2; '3': 3; '4': 4; '5': 5; '6': 6; '7': 7; '8': 8; '9': 9; }; /** * Given a natural number, return the list of digits. * * @param {number} x - The natural number to convert to a list of digits. * * Similar to `NaturalNumber.ToList`, but returns the list of digits as numbers * instead of strings. * * @example * ```ts * import { NaturalNumber } from "hkt-toolbelt"; * * type Result = NaturalNumber._$digits<42>; // [4, 2] * // ^? [4, 2] */ export type _$digits<S extends Number_.Number, O extends number[] = []> = 0 extends 1 ? never : Number_._$toString<S> extends `${infer Head}${infer Tail}` ? _$digits<Tail, Head extends keyof _$stringToDigitMap ? [...O, _$stringToDigitMap[Head]] : never> : O extends [] ? never : O; /** * Given a natural number, return the list of digits. * * @param {number} x - The natural number to convert to a list of digits. * * Similar to `NaturalNumber.ToList`, but returns the list of digits as numbers * instead of strings. * * @example * ```ts * import { NaturalNumber } from "hkt-toolbelt"; * * type Result = $<NaturalNumber.Digits, 42>; // [4, 2] * // ^? [4, 2] * ``` */ export interface Digits extends Kind.Kind { f(x: Type._$cast<this[Kind._], Number_.Number>): _$digits<typeof x>; } /** * Given a natural number, return the list of digits. * * @param {number} x - The natural number to convert to a list of digits. * * Similar to `NaturalNumber.ToList`, but returns the list of digits as numbers * instead of strings. * * @example * ```ts * import { NaturalNumber } from "hkt-toolbelt"; * * const result = NaturalNumber.digits(42) * // ^? [4, 2] * ``` */ export declare const digits: Kind._$reify<Digits>; export {};