import { IterationOf } from '../Iteration/IterationOf'; import { Iteration } from '../Iteration/Iteration'; import { Pos } from '../Iteration/Pos'; import { Prev } from '../Iteration/Prev'; import { Next } from '../Iteration/Next'; import { _IsNegative } from './IsNegative'; import { Cast } from '../Any/Cast'; /** * @hidden */ declare type _AddPositive = { 0: _AddPositive, Prev>; 1: N1; 2: IterationOf; }[Pos extends 0 ? 1 : number extends Pos ? 2 : 0]; /** * @hidden */ declare type AddPositive = _AddPositive extends infer X ? Cast : never; /** * @hidden */ declare type _AddNegative = { 0: _AddNegative, Next>; 1: N1; 2: number; }[Pos extends 0 ? 1 : number extends Pos ? 2 : 0]; /** * @hidden */ declare type AddNegative = _AddNegative extends infer X ? Cast : never; /** * @hidden */ export declare type _Add = { 0: AddPositive; 1: AddNegative; }[_IsNegative]; /** * Add a [[Number]] to another one * @param N1 Left-hand side * @param N2 Right-hand side * @returns `string | number | boolean` * @example * ```ts * import {N} from 'ts-toolbelt' * * type test0 = N.Add<'2', '10'> // '12' * type test1 = N.Add<'0', '40'> // '40' * type test2 = N.Add<'0', '40', 's'> // '40' * type test3 = N.Add<'0', '40', 'n'> // 40 * type test4 = N.Add<'-20', '40', 's'> // '20' * type test5 = N.Add<'-20', '40', 'n'> // 20 * ``` */ export declare type Add = N1 extends unknown ? N2 extends unknown ? _Add, IterationOf>[0] : never : never; export {};