如何仅允许联合类型作为索引键且无需包含全部键?
解决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
相关产品推荐
相关产品推荐

