Greater Than

Challenge

In This Challenge, You should implement a type GreaterThan<T, U> like T > U

Negative numbers do not need to be considered.

For example

GreaterThan<2, 1>; //should be true
GreaterThan<1, 1>; //should be false
GreaterThan<10, 100>; //should be false
GreaterThan<111, 11>; //should be true

Good Luck!

Solution

Zur Lösung dieses Problems benötigen wir lediglich einen Akkumulator, um diesen so lange mit Zahlen zu füllen, bis dieser entweder T entspricht (kleiner) oder U (großer). Falls dies in einem Durchlauf des Typen nicht der Fall ist, wird dieser rekursiv erneut aufgerufen, bis der Akkumulator die Länge von T oder U erreicht.

// Bsp.: 2, 1
// 1. Durchlauf: T = 2, U = 1, Acc = []
// 2. Durchlauf: T = 2, U = 1, Acc = [1] => damit Laenge 1 = U, und U ist somit kleiner

type GreaterThan<
  T extends number,
  U extends number,
  Acc extends any[] = []
> = T extends Acc["length"]
  ? false
  : U extends Acc["length"]
  ? true
  : GreaterThan<T, U, [...Acc, 1]>;

References