Trim

Challenge

Implement Trim<T> which takes an exact string type and returns a new string with the whitespace from both ends removed.

For example

type trimmed = Trim<"  Hello World  ">; // expected to be 'Hello World'

Solution

Die Lösung des Problems ähnelt der Medium Trim Left-Aufgabe. Auch hier werden rekursiv so lange ungültige Zeichen entfernt, bis links und rechts keine mehr vorhanden sind.

// Definieren eines Typen der die verschiedenen Typen von Leerzeichen als Vereinigung erfasst.
type Whitespace = " " | "\n" | "\t";
// Rekursiv den Typen aufrufen, bis keine Leerzeichen mehr existieren. Das Muster wird infert.
type Trim<S extends string> = S extends
  | `${Whitespace}${infer Text}`
  | `${infer Text}${Whitespace}`
  ? Trim<Text>
  : S;

References