All
Challenge
Returns true if all elements of the list are equal to the second parameter passed in, false if there are any mismatches.
For example
type Test1 = [1, 1, 1];
type Test2 = [1, 1, 2];
type Todo = All<Test1, 1>; // should be same as true
type Todo2 = All<Test2, 1>; // should be same as false
Solution
Zur Lösung des Problems können wir wieder mittels infer das jeweils erste Element der Tupel extrahieren. Nun prüfen wir für das Typargument H, ob dieses dem Typargument U entspricht. Ist dies der Fall, so können wir rekursiv den Typ erneut mit den restlichen Elementen aufrufen. Trifft dies nicht zu, so geben wir einfach false zurück.
type All<T extends unknown[], U> = T extends [infer H, ...infer R]
? H extends U
? All<R, U>
: false
: true;