Merge
Challenge
Merge two types into a new type. Keys of the second type overrides keys of the first type.
For example
type foo = {
name: string;
age: string;
};
type coo = {
age: number;
sex: string;
};
type Result = Merge<foo, coo>; // expected to be {name: string, age: number, sex: string}
Solution
Diese Herausforderung ähnelt stark der Append to Object-Herausforderung. Dort hat man die Eigenschaften beider Objekte mittels einer Vereinigung iteriert und einen
Mapped Type erstellt. Gleiches können wir auch hier tun.
type Merge<F, S> = {
[Key in keyof F | keyof S]: TODO;
};
Da in der Aufgabenstellung steht, dass Attribute des zweiten Eingabetypen priorisiert wird, prüfen wir immer zuerst, ob S[Key] existiert und nehmen diesen Wert, falls er vorhanden ist. Zusätzlich müssen wir natürlich immer noch prüfen, ob eine Eigenschaft / Schlüssel auch in S oder F existiert, ehe wir auf einen Wert zugreifen können.
type Merge<F, S> = {
[Key in keyof F | keyof S]: Key extends keyof S
? S[Key]
: Key extends keyof F
? F[Key]
: never;
};