IsRequiredKey
Challenge
Implement a generic IsRequiredKey<T, K> that return whether K are required keys of T .
For example
type A = IsRequiredKey<{ a: number; b?: string }, "a">; // true
type B = IsRequiredKey<{ a: number; b?: string }, "b">; // false
type C = IsRequiredKey<{ a: number; b?: string }, "b" | "a">; // false
Solution
Das Fragezeichen hinter einem Schlüssel bedeutet, dass dieser nicht bei der Erstellung eines Objektes angegeben werden muss. Das ? ist eine vereinfachte Schreibweise für { b: undefined | string} (bei {b?: string}). Also können wir einfach prüfen, ob der Wert zum Schlüssel den Typ undefined beinhaltet, und falls ja, false zurückgeben:
type IsRequiredKey<T, K extends keyof T> = undefined extends T[K]
? false
: true;