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

如何定义含固定值键值对的TypeScript接口并解决编译报错?

解决TypeScript字面量类型赋值错误问题

编译错误的核心原因是:TypeScript会默认把对象属性里的字符串字面量'message'推断为宽泛的string类型,但你的MessageTypeType是严格的字面量类型"message",两者类型不兼容导致报错。

以下是几种可行的解决方式:

方法一:给输入对象添加类型注解

直接为inputBody指定BodyInterface类型,让TypeScript严格按照接口约束校验属性:

interface BodyInterface {
    settings?: any;
    body?: Array<Message>;
}

interface Message {
    type: MessageTypeType;
    text: string;
}

type MessageTypeType = "message";

// 为输入对象添加类型注解
const inputBody: BodyInterface = {
    body: [
        {
            type: 'message',
            text: 'hello world'
        }
    ]
}

const caller = (body: BodyInterface) => {
    console.log(body)
}

caller(inputBody)

方法二:用as const缩小字面量类型范围

如果不想给整个对象加接口注解,可以在type字段后添加as const,强制TypeScript保留其字面量类型,而非拓宽为string:

const inputBody = {
    body: [
        {
            type: 'message' as const,
            text: 'hello world'
        }
    ]
}

额外需求:让body必须为数组

如果希望body是必填的数组(而非可选),只需修改BodyInterface的定义,去掉body属性后的可选标记?:

interface BodyInterface {
    settings?: any;
    body: Array<Message>; // 去掉?,将body设为必填项
}

内容的提问来源于stack exchange,提问作者wezrine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:16:05