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
相关产品推荐
相关产品推荐

