@dulysse1/better-node
Version:
Improve Node types & add object properties
228 lines (226 loc) • 6.11 kB
TypeScript
/// <reference path="iterations.d.ts" />
/// <reference path="_number.d.ts" />
declare namespace Tx {
namespace Number {
/**
* @from `@dulysse1/better-node`
* ### Sub `N1` to `N2`
* @example
* ```ts
* type T = Tx.Number.Sub<10, 6>;
* type T = 4;
* ```
* @param {number} N1 First number
* @param {number} N2 Second number
* @returns {number} The result of the subtraction
*/
type Sub<N1 extends number, N2 extends number> = N1 extends number
? N2 extends number
? Pos<_Sub<IterationOf<N1>, IterationOf<N2>>>
: never
: never;
/**
* @from `@dulysse1/better-node`
* ### Add `N1` to `N2`
* @example
* ```ts
* type T = Tx.Number.Add<10, 6>;
* type T = 16;
* ```
* @param {number} N1 First number
* @param {number} N2 Second number
* @returns {number} The result of the addition
*/
type Add<N1 extends number, N2 extends number> = N1 extends number
? N2 extends number
? Pos<_Add<IterationOf<N1>, IterationOf<N2>>>
: never
: never;
/**
* @from `@dulysse1/better-node`
* ### Check if `N1` is greater than `N2`
* @example
* ```ts
* type T = Tx.Number.Greater<12, 6>;
* type T = true;
* ```
* @param {number} N1 First number
* @param {number} N2 Second number
* @returns {number} A boolean at true if `N1` > `N2`
*/
type Greater<N1 extends number, N2 extends number> = _Greater<
IterationOf<N1>,
IterationOf<N2>
>;
/**
* @from `@dulysse1/better-node`
* ### Check if `N1` is lower than `N2`
* @example
* ```ts
* type T = Tx.Number.Lower<12, 6>;
* type T = false;
* ```
* @param {number} N1 First number
* @param {number} N2 Second number
* @returns {number} A boolean at true if `N1` < `N2`
*/
type Lower<N1 extends number, N2 extends number> = _Lower<
IterationOf<N1>,
IterationOf<N2>
>;
/**
* @from `@dulysse1/better-node`
* ### Check if `N1` is greater or equal to `N2`
* @example
* ```ts
* type T = Tx.Number.GreaterEq<12, 6>;
* type T = true;
* ```
* @param {number} N1 First number
* @param {number} N2 Second number
* @returns {number} A boolean at true if `N1` >= `N2`
*/
type GreaterEq<N1 extends number, N2 extends number> = _GreaterEq<
IterationOf<N1>,
IterationOf<N2>
>;
/**
* @from `@dulysse1/better-node`
* ### Check if `N1` is lower or equal to `N2`
* @example
* ```ts
* type T = Tx.Number.LowerEq<12, 6>;
* type T = false;
* ```
* @param {number} N1 First number
* @param {number} N2 Second number
* @returns {number} A boolean at true if `N1` <= `N2`
*/
type LowerEq<N1 extends number, N2 extends number> = _LowerEq<
IterationOf<N1>,
IterationOf<N2>
>;
/**
* @from `@dulysse1/better-node`
* ### Create a range array from `N1` to `N2`
* @example
* ```ts
* type T = Tx.Number.Range<1, 6>;
* type T = [1, 2, 3, 4, 5, 6]
* ```
* @param {number} N1 Start number
* @param {number} N2 End number
* @returns {number[]} A range of numbers
*/
type Range<N1 extends number, N2 extends number> = _Range<
IterationOf<N1>,
IterationOf<N2>
>;
/**
* @from `@dulysse1/better-node`
* ### Enumerate a range of numbers from `zero` to `N`
* @example
* ```ts
* type T = Tx.Number.Enum<5>;
* type T = [0, 1, 2, 3, 4]
* ```
* @param {number} N Range size from `zero`
* @param {"->"|"<-"} Way "->" OR "<-"
* @returns {number[]} A range of numbers
*/
type Enum<N extends number, Way extends _Way = "->"> = _Enum<
IterationOf<N>,
Way
>;
/**
* @from `@dulysse1/better-node`
* ### Check if `N` is between two numbers or not
* @example
* ```ts
* type T = Tx.Number.Between<5, 1, 30>;
* type T = true
* ```
* @param {number} N Range size from `zero`
* @param {number} From `N` is lower than this
* @param {number} To `N` is greater than that
* @returns {boolean} A boolean at true if `N` is between
*/
type Between<
N extends number,
From extends number,
To extends number
> = _Between<IterationOf<N>, IterationOf<From>, IterationOf<To>>;
/**
* @from `@dulysse1/better-node`
* ### Increment `N` by `one`
* @example
* ```ts
* type T = Tx.Number.Incr<30>;
* type T = 31
* ```
* @param {number} N The target number
* @returns {number} The number incremented by `one`
*/
type Incr<N extends number> = _Incr<IterationOf<N>>;
/**
* @from `@dulysse1/better-node`
* ### Decrement `N` by `one`
* @example
* ```ts
* type T = Tx.Number.Decr<30>;
* type T = 29
* ```
* @param {number} N The target number
* @returns {number} The number decremented by `one`
*/
type Decr<N extends number> = _Decr<IterationOf<N>>;
/**
* @from `@dulysse1/better-node`
* ### Get the opposite number of `N`
* @example
* ```ts
* type T = Tx.Number.Negate<30>;
* type T = -30
* ```
* @param {number} N The target number
* @returns {number} The opposite number of `N`
*/
type Negate<N extends number> = _Negate<IterationOf<N>>;
/**
* @from `@dulysse1/better-node`
* ### Check if `N` is positive
* @example
* ```ts
* type T = Tx.Number.IsPositive<30>;
* type T = true
* ```
* @param {number} N The target number
* @returns {boolean} A boolean at true if `N` is positive
*/
type IsPositive<N extends number> = _IsPositive<IterationOf<N>>;
/**
* @from `@dulysse1/better-node`
* ### Check if `N` is negative
* @example
* ```ts
* type T = Tx.Number.IsNegative<30>;
* type T = false
* ```
* @param {number} N The target number
* @returns {boolean} A boolean at true if `N` is negative
*/
type IsNegative<N extends number> = _IsNegative<IterationOf<N>>;
/**
* @from `@dulysse1/better-node`
* ### Check if `N` is zero
* @example
* ```ts
* type T = Tx.Number.IsZero<30>;
* type T = false
* ```
* @param {number} N The target number
* @returns {boolean} A boolean at true if `N` is zero
*/
type IsZero<N extends number> = _IsZero<IterationOf<N>>;
}
}