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

如何创建含可选动态字符串联合属性名的TypeScript Record类型?

解决方案

要实现预定义属性名且全部可选的对象类型,同时支持动态增减属性列表,直接用TypeScript内置的Partial工具类型配合Record即可解决问题:

修改后的代码

type options = 'one' | 'two' | 'three';
// 用Partial将Record生成的必填属性转为可选
type List = Partial<Record<options, string>>;

// 合法
const MyObjOne: List = {
    one: 'Value 1',
    two: 'Value 2',
    three: 'Value 3',
}

// 现在合法
const MyObjTwo: List = {
  one: 'Value 1',
  two: 'Value 2',
}

// 单个属性也合法
const MyObjThree: List = {
  three: 'Value 3',
}

// 空对象同样合法
const MyObjFour: List = {}

原理说明

  • Record<options, string>会生成一个所有属性必填的对象类型,这也是你之前代码报错的原因——它要求必须包含所有预定义属性。
  • Partial<T>是TypeScript内置工具类型,作用是将传入的类型T中所有属性转为可选类型。两者结合后,就得到了"属性名预定义、全部可选"的对象类型。
  • 当需要动态增减可选属性时,只需要修改options联合类型的成员即可,无需逐个调整对象类型的属性定义,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Advait Junnarkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:01:27