rivo
Version:
🤖 The ultimate library you need for composable type-level programming in TypeScript, powered by HKT.
35 lines (32 loc) • 991 B
TypeScript
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>;
}