Skip to content

Commit 50d1405

Browse files
committed
fix: remove depth logic
1 parent 88c7098 commit 50d1405

File tree

1 file changed

+16
-19
lines changed

1 file changed

+16
-19
lines changed

source/subtract.d.ts

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -51,24 +51,21 @@ export type Subtract<A extends number, B extends number> =
5151
: SubtractPostChecks<A, B>;
5252

5353
// When we get here, A and B are not equal and neither of them are 0, +/- infinity or the "number" type
54-
type SubtractPostChecks<A extends number, B extends number, Depth extends number = 20, AreNegative = [IsNegative<A>, IsNegative<B>]> =
55-
// Depth & DepthCounter are used to prevent infinite recursion (issue on TS < 5.4.0)
56-
Depth extends never
57-
? never
58-
: AreNegative extends [false, false]
59-
? LessThan<A, B> extends true
54+
type SubtractPostChecks<A extends number, B extends number, AreNegative = [IsNegative<A>, IsNegative<B>]> =
55+
AreNegative extends [false, false]
56+
? LessThan<A, B> extends true
6057
// When A < B we can reverse the result of B - A
61-
? ReverseSign<SubtractPostChecks<B, A, DepthCounter[Depth]>>
58+
? ReverseSign<SubtractPostChecks<B, A>>
6259
// Both numbers are positive and A > B - this is where we always want to end up and do the actual subtraction
63-
: BuildTuple<A> extends [...BuildTuple<B>, ...infer R]
64-
? R['length']
65-
: never
66-
: AreNegative extends [true, true]
67-
// When both numbers are negative we subtract the absolute values and then reverse the sign
68-
? ReverseSign<SubtractPostChecks<NumberAbsolute<A>, NumberAbsolute<B>, DepthCounter[Depth]>>
69-
// When the signs are different we can add the absolute values and then reverse the sign if A < B
70-
: [...BuildTuple<NumberAbsolute<A>>, ...BuildTuple<NumberAbsolute<B>>] extends infer R extends unknown[]
71-
? LessThan<A, B> extends true ? ReverseSign<R['length']> : R['length']
72-
: never;
73-
74-
type DepthCounter = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...Array<0>];
60+
: BuildTuple<A> extends [...BuildTuple<B>, ...infer R]
61+
? R['length']
62+
: never
63+
: AreNegative extends [true, true]
64+
// When both numbers are negative we subtract the absolute values and then reverse the sign
65+
? SubtractPostChecks<NumberAbsolute<A>, NumberAbsolute<B>> extends infer Result extends number
66+
? ReverseSign<Result>
67+
: never
68+
// When the signs are different we can add the absolute values and then reverse the sign if A < B
69+
: [...BuildTuple<NumberAbsolute<A>>, ...BuildTuple<NumberAbsolute<B>>] extends infer R extends unknown[]
70+
? LessThan<A, B> extends true ? ReverseSign<R['length']> : R['length']
71+
: never;

0 commit comments

Comments
 (0)