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;

References