Optional Keys

Challenge

Implement the advanced util type OptionalKeys<T>, which picks all the optional keys into a union.

Solution

Für die Lösung dieser Aufgabe muss man einfach die Kondition aus der Aufgabe Required umdrehen, um alle Keys zu finden, die optional sind. Ergänzend packt man noch den keyof-Operator dazu, um besagte Attribute als Vereinigung zu erhalten.

type OptionalKeys<T> = keyof {
  [Key in keyof T as Omit<T, Key> extends T ? Key : never]: T[Key];
};

References

Utility Types - Mapped Types