将两个类型合并成一个类型,第二个类型的键会覆盖第一个类型的键
例如:
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}
// 答案 1
type Merge<F, S> = {
[K in keyof F | keyof S]: K extends keyof S
? S[K]
: K extends keyof F
? F[K]
: never
}
// 答案 2
type Flatten<T> = { [K in keyof T]: T[K] }
type Merge<F, S> = Flatten<Omit<F, keyof S> & S>