TypeScript常见误区:为何Record类型定义的所有属性均为必填?
报错原因
- TypeScript 内置的
Record<Keys, Type>工具类型的作用是构造所有键均为必填的对象类型:第一个泛型参数传入的联合类型的所有成员,都必须是该类型对象上存在的属性,第二个泛型参数统一规定所有属性的值类型。 - 示例中
AllowedKeys是'a' | 'b'联合类型,因此Record<AllowedKeys, boolean>要求对应的对象必须同时存在a、b两个布尔类型的属性。 someObject包含了全部要求的属性,符合类型规则;anotherObject缺失了必填属性b,因此触发类型报错。
可选解决方案
如果业务场景允许只传入部分AllowedKeys中的键,可以将属性调整为可选:
// 用 Partial 包裹 Record,所有属性变为可选 const anotherObject: Partial<Record<AllowedKeys, boolean>> = {a: true}
内容的提问来源于stack exchange,提问作者Will Jenkins
相关产品推荐
相关产品推荐

