如何定义键为数组元素类型且可选的TypeScript对象类型?
解决TypeScript中映射类型的可选键约束问题
要实现对象键必须来自指定数组元素、允许缺失部分键、禁止出现数组外的键的需求,只需在映射类型的键后面添加?,将必选属性转为可选属性即可:
const someArray = ['animals', 'birds'] as const; // 定义可选映射类型 type TempType = { [key in typeof someArray[number]]?: string[]; };
验证示例
- 仅包含部分数组元素作为键(合法,无报错):
const temp: TempType = { 'animals': ['dog', 'cat'] };
- 包含数组外的键(非法,触发类型错误):
const temp: TempType = { 'animals': ['dog', 'cat'], 'random': ['random_1'] };
原理说明
?标记将映射类型中的每个键转为可选属性,因此不需要强制包含数组内的所有元素;[key in typeof someArray[number]]通过as const推断出的字面量联合类型'animals' | 'birds',严格限制了对象键的可选范围;- TypeScript的对象字面量额外属性检查会自动拦截超出范围的键,确保类型安全。
内容的提问来源于stack exchange,提问作者Kugesh Rajasekaran
相关产品推荐
相关产品推荐

