如何仅选取TypeScript类型中的c.y属性?无需手动编写嵌套Pick代码
如何在TypeScript中深层选取对象的嵌套属性类型?
问题场景
给定如下TypeScript类型:
type newType = { a: string, b: string, c: { x: string, y: string, z: string, }, }
我们需要仅保留其中的c.y属性结构,期望得到的类型是:
type newTypePick = { c: { y: string, }, }
但不想手动写这种嵌套Pick的实现:
type newTypePick = { c: Pick<newType['c'], 'y'>; };
解决方案:自定义深层选取工具类型
可以写一个通用的DeepPick工具类型,通过路径字符串直接指定要选取的嵌套属性,自动生成对应的嵌套结构:
type DeepPick<T, Path extends string> = Path extends `${infer K}.${infer Rest}` ? K extends keyof T ? { [P in K]: DeepPick<T[K], Rest> } : never : Path extends keyof T ? { [P in Path]: T[P] } : never;
用这个类型实现需求非常简单:
type newTypePick = DeepPick<newType, 'c.y'>;
类型说明
- 这个工具类型会把路径字符串(比如
'c.y')拆分为层级键('c'和'y') - 递归遍历每一层类型,逐步构建出只包含目标路径的嵌套对象结构
- 如果路径里的键在对应层级不存在,会返回
never,相当于做了类型校验
内容的提问来源于stack exchange,提问作者new of man
相关产品推荐
相关产品推荐

