Replace

Challenge

Implement Replace<S, From, To> which replace the string From with To once in the given string S

For example

type replaced = Replace<"types are fun!", "fun", "awesome">; // expected to be 'types are awesome!'

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.

type Replace<
  S extends string,
  From extends string,
  To extends string
> = From extends ""
  ? S
  : S extends `${infer L}${From}${infer R}`
  ? `${L}${To}${R}`
  : S;

References