AnyOf
Challenge
Implement Python liked any function in the type system. A type takes the Array and returns true if any element of the Array is true. If the Array is empty, return false.
For example:
type Sample1 = AnyOf<[1, "", false, [], {}]>; // expected to be true.
type Sample2 = AnyOf<[0, "", false, [], {}]>; // expected to be false.
Solution
Zur Lösung dieses Problems ist es hilfreich, erstmal alle Falsy-Werte als separaten Typ zu definieren:
type Falsy =
| false
| 0
| ""
| []
| { [P in PropertyKey]: never }
| undefined
| null;
Anschließend kann man wieder mittels infer in konditionellen Typen über den Array laufen und für jedes Element prüfen, ob es
sich um ein true-Wert handelt. Falls nicht, wird der Typ rekursiv so lange aufgerufen, bis man das Ende des Arrays erreicht und damit alle Element geprüft hat.
type AnyOf<T extends readonly any[]> = T extends [infer H, ...infer T]
? H extends Falsy
? AnyOf<T>
: true
: false;