UNPKG

@kakasoo/proto-typescript

Version:

Utility types and implementations based on JavaScript prototypes.

44 lines 2.42 kB
import { ToPrimitive } from '../interfaces/to-primitive.interface'; import { StringType } from '../types'; import { ReadonlyOrNot } from '../types/primitive.type'; import { TypedDecimal } from './numbers/typed-decimal.class'; import { TypedInt } from './numbers/typed-int.class'; import { TypedObject } from './typed-object.class'; export declare class TypedNumber<T extends number> extends TypedObject<T> implements ToPrimitive<T> { private readonly number; constructor(data?: T); /** * A function that makes it possible to narrow down the range of TypeNumber types more narrowly. * * @param format 'int' | 'decimal' | 'decimal(n,n)' | 'float' * @example * ```ts * TypedNumber.refine('int')(3); // only int. * * TypedNumber.refine('decimal', 1, 2)(3.14); // only decimal(1,2). * TypedNumber.refine('decimal')(3.14); // decimal, if is same as float. * TypedNumber.refine('decimal(1,2)')(3.14); * ``` * * @todo if format is `decimal(n,n)`, integer and fractional parameter have to be empty. */ static refine<Integer extends number>(format: 'int'): <N extends number>(data: StringType.IsInt<N>) => TypedInt<N>; static refine<Integer extends number>(format: 'float'): <N extends number>(data: StringType.IsDecimal<N, number, number>) => TypedDecimal<N, number, number>; static refine<Integer extends number, Fractional extends number>(format: 'decimal' | `decimal(${Integer},${Fractional})`, integer?: Integer, fractional?: Fractional): <N extends number>(data: StringType.IsDecimal<N, Integer, Fractional>) => TypedDecimal<N, Integer, Fractional>; toPrimitive(): T; } export declare namespace TypedNumber { type Format = 'number' | 'int' | `decimal(${number},${number})` | 'float' | `range(${number},${number})`; /** * Inference of value type. */ type ValueType<Pointer extends TypedNumber<any> | number> = Pointer extends TypedNumber<infer T> ? T : Pointer extends number ? Pointer : never; /** * Inference of value types. */ type ValueTypes<Pointers extends ReadonlyOrNot<(TypedNumber<any> | number)[]>> = Pointers extends [ infer F extends TypedNumber<infer T> | number, ...infer Rest extends ReadonlyOrNot<(TypedNumber<any> | number)[]> ] ? [TypedNumber.ValueType<F>, ...TypedNumber.ValueTypes<Rest>] : []; } //# sourceMappingURL=typed-number.class.d.ts.map