如何定义部分键类型严格其余可自由输入的TypeScript Record?
实现方案
你可以通过给接口添加字符串索引签名满足需求,完整代码如下:
type Make = "Volvo" | "Polestar" | "Saab"; interface Car { make: Make; horsePower: number; allWheelDrive: boolean; // 索引签名声明,允许任意额外字符串键,值为任意类型 [key: string]: any; }
校验逻辑说明
- 已明确声明的三个字段会走严格类型校验:
make的取值必须是指定的三个枚举值之一,传入不在范围内的值(比如示例中的Daimler)会直接抛出类型错误horsePower必须为数字、allWheelDrive必须为布尔值,不符合要求的赋值也会被拦截
- 末尾的索引签名声明代表除了上面明确指定的字段外,其他任意字符串类型的键都允许存在,值可以是任意类型,完全支持
colour、trim这类自定义字段的添加。
替代写法
如果你偏好类型别名的写法,也可以和Record工具类型组合实现,效果完全一致:
type Make = "Volvo" | "Polestar" | "Saab"; type Car = { make: Make; horsePower: number; allWheelDrive: boolean; } & Record<string, any>;
内容的提问来源于stack exchange,提问作者brendangibson
相关产品推荐
相关产品推荐

