实现思路
- 类型工具
ApplyDefaults
:
- 使用
keyof
操作符获取 T
和 Defaults
的属性键类型。
- 通过
Exclude
操作符找出 T
中不在 Defaults
中的属性键。
- 使用条件类型和映射类型,对于
Defaults
中存在的属性,使用 Defaults
中的类型;对于 Defaults
中不存在的属性,使用 T
中的原类型。
- 函数
applyDefaults
:
- 接受两个参数,分别为类型
T
和 Defaults
的对象。
- 使用
Object.assign
方法,先将 T
对象拷贝到一个新对象,然后将 Defaults
对象中存在的属性合并到新对象,实现属性默认值的应用。
代码实现
type ApplyDefaults<T, Defaults> = {
[K in keyof T]: K extends keyof Defaults? Defaults[K] : T[K];
};
function applyDefaults<T, Defaults extends Partial<T>>(obj: T, defaults: Defaults): ApplyDefaults<T, Defaults> {
return Object.assign({}, obj, defaults) as ApplyDefaults<T, Defaults>;
}