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 _SubPositive = { 0: _SubPositive, Prev>; 1: N1; 2: number; }[Pos extends 0 ? 1 : number extends Pos ? 2 : 0]; /** * @hidden */ declare type SubPositive = _SubPositive extends infer X ? Cast : never; /** * @hidden */ declare type _SubNegative = { 0: _SubNegative, Next>; 1: N1; 2: number; }[Pos extends 0 ? 1 : number extends Pos ? 2 : 0]; /** * @hidden */ declare type SubNegative = _SubNegative extends infer X ? Cast : never; /** * @hidden */ export declare type _Sub = { 0: SubPositive; 1: SubNegative; }[_IsNegative]; /** * Subtract a [[Number]] from 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.Sub<'2', '10'> // '-8' * type test1 = N.Sub<'0', '40'> // '-40' * type test2 = N.Sub<'0', '40', 's'> // '-40' * type test3 = N.Sub<'0', '40', 'n'> // -40 * type test4 = N.Sub<'-20', '40', 's'> // string * type test5 = N.Sub<'-20', '40', 'n'> // number * ``` */ export declare type Sub = N1 extends unknown ? N2 extends unknown ? _Sub, IterationOf>[0] : never : never; export {};