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

如何仅允许联合类型作为索引键且无需包含全部键?

解决TypeScript联合类型键无需全部包含的问题

你当前用key in WidgetCondition定义的是必填的映射类型,所以每个内部对象必须包含联合类型里的所有键,这就是缺失preorder会报错的原因。要实现“仅允许联合类型作为键,但无需包含全部”的需求,只需要在映射的键后面加上?修饰符,把每个键转为可选属性即可。

修改后的代码如下:

const widgetConditions = ['boxed', 'loose', 'preorder'] as const
export type WidgetCondition = (typeof widgetConditions)[number]

export type WidgetSummaryData = {
  [key: string]: {
    // 添加?将联合类型中的每个键设为可选
    [key in WidgetCondition]?: number
  }
}

const widgetSummary = {
  '1': {
    boxed: 1,
    loose: 2
    // 现在preorder缺失不会触发类型错误
  },
  '2': {
    boxed: 4,
    loose: 5,
    preorder: 6
  }
} satisfies WidgetSummaryData

这样修改后,内部对象的键只能是WidgetCondition联合类型中的成员(无法添加其他无关键),同时不需要强制包含所有键,完全符合你的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:42:04