You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅选取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 11:33:19