Diff

Challenge

Get an Object that is the difference between O & O1

Solution

Zur Lösung des Problems können wir einfach auf den einbauten Utility-Typ Omit zugreifen. Zuerst bilden wir die Schnittmenge der beiden Objekte, und entfernen dann folgend die Eigenschaften, die in beiden Objekten vorhanden sind (erhalten wir durch eine Schnittmenge der Schlüssel / Eigenschaften).

type Foo = {
  name: string;
  age: string;
};
type Bar = {
  name: string;
  age: string;
  gender: number;
};

type KeysInBothObjects<T, U> = keyof T & keyof U; // keyof Foo & keyof Bar => > "name" | "age"

type Diff<T, U> = Omit<T & U, keyof T & keyof U>;

References

Union Types Utility Types