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

如何在Record类型中传入正确键类型?构造联合类型键的对象类型

解决TypeScript中用Record构造指定字段联合类型键的对象类型问题

你遇到的问题核心是对Pick和类型索引访问的作用理解有误:

  • Pick<Test, 'c'>返回的是包含c字段的对象类型(即{ c: 'x' | 'y' | 'z' }),但Record的第一个参数要求是可作为对象键的类型(比如字符串字面量联合、number、symbol等),对象类型没法直接当键用,所以会报错。

正确的做法是用类型索引访问直接获取Test接口中c字段的类型:

interface Test {
  a: string;
  b: string;
  c: 'x' | 'y' | 'z';
}

// 正确构造目标对象类型
type CKeyRecord = Record<Test['c'], string>;

此时CKeyRecord会被TypeScript解析为:

{
  x: string;
  y: string;
  z: string;
}

完全符合你想要的、包含c字段联合类型所有键的对象类型。

如果后续需要提取多个字段的类型作为联合键,也可以用类似的方式,比如Record<Test['a' | 'c'], string>(不过这里a的类型是string,作为键的话会是宽泛的字符串类型,需要注意场景)。

内容的提问来源于stack exchange,提问作者Amjad sibili

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:50:27