Trunc

Challenge

Implement the type version of Math.trunc, which takes string or number and returns the integer part of a number by removing any fractional digits.

For example:

type A = Trunc<12.34>; // 12

Solution

Zur Lösung dieses Problems können wir template literal types nutzen, um nach Mustern in Zeichenketten zu suchen. Indem wir rechts und links von dem Punkt als Separator die Typvariablen inferieren, erhalten wir das die Zahl als Zeichenkette ohne Nachkommenzahlen. Wichtig zuständlich, T immer in eine Zeichenkette umzuwandeln, da T auch ein Number literal sein kann, und wir für solche keine template literal types nutzen können.

type Trunc<T extends string | number> = `${T}` extends `${infer H}.${infer R}`
  ? H
  : `${T}`;

References