如何定义含固定值键值对的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
相关产品推荐
相关产品推荐

