StartsWith

Challenge

Implement StartsWith<T, U> which takes two exact string types and returns whether T starts with U

For example

type a = StartsWith<"abc", "ac">; // expected to be false
type b = StartsWith<"abc", "ab">; // expected to be true
type c = StartsWith<"abc", "abcd">; // expected to be false

Solution

Die Lösung dieses Problems ist es zu prüfen, ob die Zeichenkette U am Anfang der Zeichenkette T steht. Dies kann einfach geprüft werden, indem man einen Template-String mit U am Anfang und einer beliebigen Rest-Zeichenkette nutzt. Man kann es wie folgt ausdrucken: Erweitert T eine Zeichenkette, die mit U beginnt und neben U beliebige weitere Zeichen besitzt?

// Beispiel T = 'Test', U = 'Te' => R = 'st' und damit true
type StartsWith<T extends string, U extends string> = T extends `${U}${infer R}`
  ? true
  : false;

References