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

如何创建以联合类型为键且无需全量赋值的TypeScript Record

解决TypeScript联合类型作为键的部分映射问题

先看定义的联合类型:

type SubscriptionLevel = 'normal' | 'premium' | 'cancelled';

想要创建一个以该联合类型为键的对象,但只需要给部分键赋值,直接用Record<SubscriptionLevel, string | undefined>会触发TS报错——因为Record要求所有键必须存在,哪怕值是undefined,手动补全每个缺失的键太繁琐。

下面是几种简洁且类型安全的实现方式:

方法一:用Partial工具类型包装Record

直接借助TS内置的Partial工具,把Record的所有属性转为可选:

const badgeIcon: Partial<Record<SubscriptionLevel, string>> = {
    'premium': 'crown',
    'cancelled': 'grayed',
};

这样既不用补全所有键,又能保证键只能是SubscriptionLevel里的成员,避免拼写错误,完全符合类型安全要求。

方法二:自定义PartialRecord类型

如果觉得Partial<Record<...>>不够直观,可以自定义一个更明确的类型:

// 自定义部分键映射类型
type PartialRecord<K extends keyof any, T> = {
    [P in K]?: T;
};

const badgeIcon: PartialRecord<SubscriptionLevel, string> = {
    'premium': 'crown',
    'cancelled': 'grayed',
};

这个自定义类型和第一种实现逻辑完全一致,只是命名更清晰,一眼就能看出是支持部分键赋值的映射。

补充说明

这两种方法都能保证:

  • 只能使用SubscriptionLevel中的值作为键,杜绝拼写错误
  • 无需手动给未用到的键赋值undefined
  • 类型检查依然生效,比如给键赋值非string类型会触发TS报错

内容的提问来源于stack exchange,提问作者Steve B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:30:01