UNPKG

rivo

Version:

🤖 The ultimate library you need for composable type-level programming in TypeScript, powered by HKT.

37 lines (35 loc) 1.06 kB
import type { _StrToNum } from "./_StrToNum"; import type { Reverse } from "../../Str/Reverse"; /** * Divide integer `N` by 10^`Length<By>`. * * **⚠️ Warning:** length of `By` must be less than or equal to the number of digits in `N`. * @private * * @example * ```typescript * type R1 = _Div10<125, "_">; * // ^?: 12.5 * type R2 = _Div10<-12300, "__">; * // ^?: -123 * type R3 = _Div10<-12300, "___">; * // ^?: -12.3 * ``` */ export type _Div10<N extends number, By extends string> = _StrToNum< __Div10<Reverse<`${N}`>, By, ""> extends infer R extends string ? R extends `.${infer R}` ? `0.${R}` : R : never >; type __Div10<A extends string, By extends string, B extends string> = By extends `${string}${infer RestBy}` ? A extends `${infer F}${infer R}` ? __Div10<R, RestBy, `${F}${B}`> : never : _RemoveTrailingFractional0s<`${Reverse<A>}.${B}`>; type _RemoveTrailingFractional0s<S extends string> = S extends `${infer F}0` ? _RemoveTrailingFractional0s<F> : S extends `${infer F}.` ? F : S;