[d24f17c] | 1 | import { IterationOf } from '../Iteration/IterationOf';
|
---|
| 2 | import { Iteration } from '../Iteration/Iteration';
|
---|
| 3 | import { Pos } from '../Iteration/Pos';
|
---|
| 4 | import { Prev } from '../Iteration/Prev';
|
---|
| 5 | import { Next } from '../Iteration/Next';
|
---|
| 6 | import { _IsNegative } from './IsNegative';
|
---|
| 7 | import { Cast } from '../Any/Cast';
|
---|
| 8 | /**
|
---|
| 9 | * @hidden
|
---|
| 10 | */
|
---|
| 11 | declare 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 | */
|
---|
| 19 | declare type AddPositive<N1 extends Iteration, N2 extends Iteration> = _AddPositive<N1, N2> extends infer X ? Cast<X, Iteration> : never;
|
---|
| 20 | /**
|
---|
| 21 | * @hidden
|
---|
| 22 | */
|
---|
| 23 | declare 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 | */
|
---|
| 31 | declare type AddNegative<N1 extends Iteration, N2 extends Iteration> = _AddNegative<N1, N2> extends infer X ? Cast<X, Iteration> : never;
|
---|
| 32 | /**
|
---|
| 33 | * @hidden
|
---|
| 34 | */
|
---|
| 35 | export 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 | */
|
---|
| 56 | export declare type Add<N1 extends number, N2 extends number> = N1 extends unknown ? N2 extends unknown ? _Add<IterationOf<N1>, IterationOf<N2>>[0] : never : never;
|
---|
| 57 | export {};
|
---|