面试题答案
一键面试type DeepPartial<T> = {
[P in keyof T]?: T[P] extends object
? DeepPartial<T[P]>
: T[P];
};
用到的泛型相关知识和技巧:
- 索引类型查询(
keyof
):keyof T
获取类型T
的所有键,用于遍历对象的属性。 - 条件类型(
T[P] extends object? ... : ...
):判断属性T[P]
是否为对象类型。如果是,则递归应用DeepPartial
;否则保持原类型。 - 映射类型(
[P in keyof T]: ...
):通过in
关键字对类型T
的所有属性进行遍历,并根据条件生成新的类型。?
使属性变为可选。 - 递归:在条件类型中递归使用
DeepPartial
,确保嵌套对象的属性也变为可选。