UNPKG

1.91 kBTypeScriptView Raw
1import { IterationOf } from '../Iteration/IterationOf';
2import { Iteration } from '../Iteration/Iteration';
3import { Pos } from '../Iteration/Pos';
4import { Prev } from '../Iteration/Prev';
5import { Next } from '../Iteration/Next';
6import { _IsNegative } from './IsNegative';
7import { Cast } from '../Any/Cast';
8/**
9 * @hidden
10 */
11declare type _AddPositive<N1 extends Iteration, N2 extends Iteration> = {
12 0: _AddPositive<Next<N1>, Prev<N2>>;
13 1: N1;
14 2: IterationOf<number>;
15}[Pos<N2> extends 0 ? 1 : number extends Pos<N2> ? 2 : 0];
16/**
17 * @hidden
18 */
19declare type AddPositive<N1 extends Iteration, N2 extends Iteration> = _AddPositive<N1, N2> extends infer X ? Cast<X, Iteration> : never;
20/**
21 * @hidden
22 */
23declare type _AddNegative<N1 extends Iteration, N2 extends Iteration> = {
24 0: _AddNegative<Prev<N1>, Next<N2>>;
25 1: N1;
26 2: number;
27}[Pos<N2> extends 0 ? 1 : number extends Pos<N2> ? 2 : 0];
28/**
29 * @hidden
30 */
31declare type AddNegative<N1 extends Iteration, N2 extends Iteration> = _AddNegative<N1, N2> extends infer X ? Cast<X, Iteration> : never;
32/**
33 * @hidden
34 */
35export declare type _Add<N1 extends Iteration, N2 extends Iteration> = {
36 0: AddPositive<N1, N2>;
37 1: AddNegative<N1, N2>;
38}[_IsNegative<N2>];
39/**
40 * Add a [[Number]] to another one
41 * @param N1 Left-hand side
42 * @param N2 Right-hand side
43 * @returns `string | number | boolean`
44 * @example
45 * ```ts
46 * import {N} from 'ts-toolbelt'
47 *
48 * type test0 = N.Add<'2', '10'> // '12'
49 * type test1 = N.Add<'0', '40'> // '40'
50 * type test2 = N.Add<'0', '40', 's'> // '40'
51 * type test3 = N.Add<'0', '40', 'n'> // 40
52 * type test4 = N.Add<'-20', '40', 's'> // '20'
53 * type test5 = N.Add<'-20', '40', 'n'> // 20
54 * ```
55 */
56export declare type Add<N1 extends number, N2 extends number> = N1 extends unknown ? N2 extends unknown ? _Add<IterationOf<N1>, IterationOf<N2>>[0] : never : never;
57export {};