safe-integer-ts
Version:
Newtype wrapper of number type as safe-integer (53-bit precise integer)
41 lines (40 loc) • 1.6 kB
TypeScript
declare const IS_SAFE_INTEGER: unique symbol;
/**
* A number, which is validated as *safe integer* or 53-bit precise integer.
*
* @see [Number.isSafeInteger()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger)
*/
export declare type SafeInteger = number & {
[IS_SAFE_INTEGER]: true;
};
/**
* Checks if an unknown value is safe integer without any conversion.
*/
export declare const isSafeInteger: (value: unknown) => value is SafeInteger;
/**
* Casts an unknown value as safe integer without any conversion; or null if unable.
*/
export declare const asSafeInteger: (value: unknown) => SafeInteger | null;
/**
* Parses a string as safe integer; or null if unable.
*
* This function just forwards to [Number.parseInt()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseInt).
*/
export declare const parseSafeInteger: (str: string, radix?: number | undefined) => SafeInteger | null;
/**
* Tries to convert an unknown value to safe integer, using some conversions if necessary: `Math.round`, `parseInt` or `.valueOf`.
*
* Mapping:
*
* - number:
* - safe integer: the value
* - finite number: `Math.round` and `asSafeInteger` is used.
* - infinity, NaN: null
* - string: `parseInt` and `asSafeInteger` is used.
* - object:
* - non-null and has `valueOf`: `.valueOf()` and `asSafeInteger` is used.
* - other: null
* - undefined, boolean, function and anything else: null
*/
export declare const toSafeInteger: (value: unknown) => SafeInteger | null;
export {};