Drop Char

Challenge

Drop a specified char from a string.

For example:

type Butterfly = DropChar<" b u t t e r f l y ! ", " ">; // 'butterfly!'

Solution

Um die Aufgabe zu lösen, iterieren wir einfach durch die Zeichenkette. Zusätzlich definieren wir wieder einen Akkumulator, um die abgespeckten String zwischenzuspeichern.

Zur Lösung dieses Problems müssen wir einfach mittels Template literal types über den String laufen. Für jede Typ-Variable H, die wir pro Durchlauf aus S extrahieren, prüfen wir, ob es sich um das zu entfernende Zeichen C handelt. Falls dies der Fall ist, wird das Zeichen nicht in den finalen String (Akkumulator) aufgenommen.

type DropChar<S, C, Acc extends string = ""> = S extends `${infer H}${infer R}`
  ? // Wir pruefen in jeder Iteration, ob das aktuelle Zeichen dem gesuchten Zeichen (U) entspricht. Falls ja, dann erweitern wir den finalen
    // String nicht. Sonst fuegen wir es dem Akkululator hinzu.
    H extends C
    ? DropChar<R, C, `${Acc}`>
    : DropChar<R, C, `${Acc}${H}`>
  : Acc;

References

Inferring Within Conditional Types