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

OpenAI TypeScript报错:MessageInterface无法赋值给ChatCompletionMessageParam

解决TypeScript调用OpenAI chat.completions.create时的类型不匹配错误

问题原因

你遇到的No overload matches this call. Type 'MessageInterface' is not assignable to type 'ChatCompletionMessageParam'.ts(2769)错误,核心是自定义的MessageInterface类型与OpenAI SDK要求的ChatCompletionMessageParam类型不兼容:

  • 你的MessageInterface中role的类型是宽泛的string
  • 而OpenAI的ChatCompletionMessageParam要求role必须是特定的字符串字面量:"system"、"user"、"assistant"或"function"

解决方案

方案1:直接复用OpenAI提供的类型

不需要自定义MessageInterface,直接使用SDK内置的ChatCompletionMessageParam类型:

// 先导入类型
import { ChatCompletionMessageParam } from "openai/resources/chat/completions";

// 用内置类型定义状态
const [messages, setMessages] = useState<ChatCompletionMessageParam[]>([
  {
    role: "system",
    content: "You are a helpful assistant designed to output JSON.",
  },
]);

// prompt也使用该类型
const prompt: ChatCompletionMessageParam = { role: "user", content: input };

setMessages([...messages, prompt]);
const completion = await openai.chat.completions.create({
  messages: [...messages, prompt],
  model: "gpt-3.5-turbo-1106",
  response_format: { type: "json_object" },
});

方案2:修改自定义接口的类型约束

如果坚持使用自定义的MessageInterface,将role的类型改为与OpenAI一致的联合类型:

interface MessageInterface {
  // 替换宽泛的string为特定的字符串字面量联合类型
  role: "system" | "user" | "assistant" | "function";
  content: string;
}

const [messages, setMessages] = useState<MessageInterface[]>([
  {
    role: "system",
    content: "You are a helpful assistant designed to output JSON.",
  },
]);

const prompt: MessageInterface = { role: "user", content: input };

setMessages([...messages, prompt]);
const completion = await openai.chat.completions.create({
  messages: [...messages, prompt],
  model: "gpt-3.5-turbo-1106",
  response_format: { type: "json_object" },
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:33:17