IsPalindrome

Challenge

Implement type IsPalindrome<T> to check whether a string or number is palindrome.

For example:

IsPalindrome<"abc">; // false
IsPalindrome<121>; // true

Solution

Eine naheliegende Lösung für dieses Problem ist es, einfach die Zeichenkette umzudrehen, und dann zu prüfen, ob die originale sowie die umgedrehte Zeichenkette gleich sind. Hierfür definieren wir einen Hilfstyp ReverseString, der eine Zeichenkette komplett umdreht:

type ReverseString<
  T extends string,
  R extends string = ""
> = T extends `${infer F}${infer Rest}` ? ReverseString<Rest, `${F}${R}`> : R;

Haben wir den Hilfstyp erstellt, so fällt es nun leicht, auf ein Palindrom zu prüfen. Wir müssen lediglich noch beachten, dass Zahlen noch in eine Zeichenkette umgewandelt werden:

type IsPalindrome<T extends string | number> =
  `${T}` extends ReverseString<`${T}`> ? true : false;

References