Length of String 2
Challenge
Implement a type LengthOfString<S> that calculates the length of the template string (as in 298 - Length of String):
type T0 = LengthOfString<"foo">; // 3
The type must support strings several hundred characters long (the usual recursive calculation of the string length is limited by the depth of recursive function calls in TS, that is, it supports strings up to about 45 characters long).
Solution
Zur Lösung dieser Herausforderungen benötigen wir einen Akkumulator in Form eines Arrays, um für jedes Zeichen der Zeichenkette einen Wert in den Array zu packen. Machen wir dies so lange bis wir das Ende des String erreichen, dann geben wir einfach die Länge des Akkumulators (= Anzahl der Zeichen) zurück.
type LengthOfString<
S extends string,
Acc extends number[] = []
> = S extends `${infer H}${infer T}`
? LengthOfString<T, [...Acc, 1]>
: Acc["length"];