OmitByType

Challenge

From T, pick a set of properties whose type are not assignable to U.

For Example

type OmitBoolean = OmitByType<
  {
    name: string;
    count: number;
    isReadonly: boolean;
    isEnable: boolean;
  },
  boolean
>; // { name: string; count: number }

Solution

Auch zur Lösung dieses Problems erstellen wir wieder einen Mapped-Type, und prüfen bei Iterieren über die Attribute des Objektes, ob es sich bei dem Wert zu der Eigenschaft um den Typ U handelt. Falls ja, wird die Eigenschaft verworfen, sonst wird es erglänzt.

type OmitByType<T, U> = {
  [key in keyof T as T[key] extends U ? never : key]: T[key];
};

References