问题 #
将两种类型合并为一种新类型。第二种类型的键将覆盖第一种类型的键。
type Foo = {
a: number;
b: string;
};
type Bar = {
b: number;
c: boolean;
};
type Result = Merge<Foo, Bar> = {
a: number;
b: number;
c: boolean;
}解答 #
type Merge<F extends object, S extends object> = {
[K in keyof F| keyof S]: K extends keyof S ? S[K]: K extends keyof F ? F[K]: never
}拆分 #
- 利用联合类型把所有的
key拿出来 - 有限确定
key是否是S的key返回S[K] - 再确定
key是否是F的key返回F[K] - 都不是就返回
never