'body' 的参数未在 Next.js 的 API 中使用 TypeScript 为 send() \ json() 提供

An argument for 'body' was not provided for send() \ json() in Next.js's API, with TypeScript

我在 Next.js 中使用 API 路线。在 'api' 文件夹中,我的 'file.tsx' 包含以下内容:

import type { NextApiRequest, NextApiResponse } from "next";
const someFunction = (req: NextApiRequest, res: NextApiResponse<data>) => { the rest of the code... }

一切正常。但是,关于以下行:

res.status(200).send();

send() 突出显示,我收到以下 TypeScript 错误:

Expected 1 arguments, but got 0.ts(2554) utils.d.ts(182, 25): An argument for 'body' was not provided.

按照文档 (https://nextjs.org/docs/api-routes/response-helpers),我尝试添加一个参数,如 res.status(200).send({key: "value"}),或 res.status(200).send("string"),或两者都使用 json() 而不是 send()

我什至从文档中复制了确切的例子,但这个错误仍然存​​在。 唯一清除错误(作为测试)的是更改类型 - 但自然地,这是不可取的,因为错误可能是有原因的。

我是不是漏掉了什么?

这里发生了几件事。对于第一个错误,Typescript 抱怨没有提供 'body' 的参数。如您所知,此错误非常简单。另一个错误来自已经为您定义的响应类型:

res: NextApiResponse<Data>

其中 Data 类型定义为:

type Data = {
  name: string;
};

这是一个名称为 属性 且类型为 string 的对象。

因此,如果您想发送纯字符串,则需要将类型修改为:

type Data = string;

您也可以直接在响应中定义它,如下所示:


const someFunction = (req: NextApiRequest, res: NextApiResponse<string>) => {
  return res.status(200).json("hello");
};

export default someFunction

在任何情况下,您都需要记住,Typescript 要求您明确说明作为响应发送的数据类型。在项目中使用 Typescript 的全部意义在于通过向代码添加类型安全检查来防止错误。

请参阅 Everyday Types 了解更多信息。