ReplaceAll
Challenge
Implement ReplaceAll<S, From, To> which replace the all the substring From with To in the given string S
For example
type replaced = ReplaceAll<"t y p e s", " ", "">; // expected to be 'types'
Solution
Zur Lösung des Problems inferen wir mittels template Literal Types die Struktur des zu findenden String, und erhalten dadurch das den Teil links der gesuchten Zeichenkette, diese selbst sowie den Teil rechts davon. Hier können wir einfach einen neuen template literal type zurückgeben, in dem wir diese drei Teile wieder zusammenfügen und den mittleren Teil, also die gesuchte Zeichenkette durch eine andere ersetzen. Um nun alle Vorkommen von From aufzufinden, rufen wir den Typ bei einem gefundenen String mit dem rechten, restlichen Teil rekursiv so lange auf, bis wir die ganze Zeichenkette durch sind.
type ReplaceAll<
S extends string,
From extends string,
To extends string
> = From extends ""
? S
: S extends `${infer Head}${From}${infer Tail}`
? `${Head}${To}${ReplaceAll<Tail, From, To>}`
: S;