UNPKG

rivo

Version:

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

35 lines (32 loc) • 991 B
import type { Int } from "."; import type { Args, Fn } from "../../HKT"; import type { Every } from "../../List/Every"; import type IsDigitFn from "../../Str/IsDigit"; import type { ToChars } from "../../Str/ToChars"; import type { AssertInt } from "../../helpers"; import type { Abs } from "../Abs"; /** * Parse a string to an {@link Int}. Return `never` if the string is not a valid integer. * * Type safety is **not guaranteed**. * * Sig: `(s: string) => Int` */ export type FromStrUnsafe<S extends string> = AssertInt< string extends S ? Int : S extends `${infer N extends number}` ? Every<IsDigitFn, ToChars<`${Abs<N>}`>> extends true ? N : never : never >; /** * [Fn] Parse a string to an {@link Int}. Return `never` if the string is not a valid integer. * * Type safety is **not guaranteed**. * * Sig: `(s: string) => Int` */ export default interface FromStrUnsafeFn extends Fn<[string], Int> { def: ([s]: Args<this>) => FromStrUnsafe<typeof s>; }