Integer
Challenge
Please complete type Integer<T>, type T inherits from number, if T is an integer return it, otherwise return never.
Solution
Zur Lösung dieses Problems können wir mittels template literal types erstmal in einem Hilfstyp prüfen, ob die übergebene Zahl eine valide Zahl ist (falls Nachkommazeichen vorhanden, ist hier nur 0 erlaubt).
type isValidNumber<T extends number> =
`${T}` extends `${infer H extends number}.${infer R extends number}`
? R extends 0
? true
: false
: true;
Anschließend müssen wir noch sicherstellen, dass number als Typ nicht akzeptiert wird und never zurückgeben, falls number als Typ reingegeben wird.
Ansonsten prüfen wir, ob es sich um eine valide Nummer handelt.
type Integer<T extends number> = [number] extends [T]
? never
: isValidNumber<T> extends true
? T
: never;