Length of String
Challenge
Compute the length of a string literal, which behaves like String#length.
Solution
Zur Lösung dieses Problems können wir leider nicht einfach einen Lookup-Type namens Length auf dem String aufrufen, da wir hier nur number erhalten. Stattdessen müssen wir jedes Zeichen einzeln zählen. Erreichen können wir das über einen Akkumulator, den wir für jedes Zeichen mit einem Wert (z.B. 1) füllen (z.B. AA => [1,1]),
bis wir die Zeichenkette durchlaufen haben. Dann können wir einfach die Länge des Akkumulators zurückgeben. Der Akkumulator wird hierbei mit einem leeren Array als Standard-Wert versehen, da dieser nicht als Eingabe zu erwarten ist.
// Beispiel `kumiko`
// H = 'k', R = 'umiko', Acc = [1]
// H = 'u', R = 'miko' , Acc = [1,1]
// ...
type LengthOfString<
S extends string,
Acc extends number[] = []
> = S extends `${infer H}${infer R}`
? LengthOfString<R, [...Acc, 1]>
: Acc["length"];