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

如何定义部分键类型严格其余可自由输入的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:09:03