面试题答案
一键面试- 实现
DeepPick
类型:
type DeepPick<T, K extends string> = {
[P in K]: P extends keyof T
? T[P]
: P extends `${infer First}.${infer Rest}`
? First extends keyof T
? DeepPick<T[First], Rest>
: never
: never;
};
这个DeepPick
类型定义用于处理嵌套结构。它通过递归解析属性路径(例如address.city
),如果路径存在则返回对应的值类型,否则返回never
。
- 定义
CompanyInfo
类型:
type CompanyInfo = Pick<Company, 'name'> & {
city: DeepPick<Company, 'address.city'>;
};
这里使用Pick
工具类型从Company
类型中提取name
属性。同时,通过DeepPick
工具类型提取address.city
属性,并将其合并到CompanyInfo
类型中。
实现思路:
- 首先实现
DeepPick
工具类型,它能处理嵌套对象的属性提取。通过对属性路径进行解析,递归地找到嵌套对象中的目标属性类型。 - 然后利用
Pick
工具类型从Company
类型中获取name
属性。 - 最后将
name
属性与通过DeepPick
获取的address.city
属性合并,形成CompanyInfo
类型,满足题目要求。