reactjs - “ServerResponse”类型不存在属性“status”(TS2339)
问题描述
我尝试创建一个界面,安装反应类型,唯一可行的方法是当我将代码放入 JavaScript 但在 TS 项目中时,它给了我错误:
“ServerResponse”类型不存在属性“status”(TS2339)
这是代码:
import multer from 'multer';
import nc from "next-connect";
const upload = multer({
storage: multer.diskStorage({
destination: './public/uploads',
filename: (req, file, cb) => cb(null, file.originalname),
}),
});
const apiRoute = nc({
onError(error, req, res) {
res.status(501).json({ error: `Sorry something Happened! ${error.message}` });
},
onNoMatch(req, res) {
res.status(405).json({ error: `Method '${req.method}' Not Allowed` });
},
});
apiRoute.use(upload.array('theFiles'));
apiRoute.post((req, res) => {
res.status(200).json({ data: 'success' });
});
export default apiRoute;
export const config = {
api: {
bodyParser: false, // Disallow body parsing, consume as stream
},
};
如何解决打字问题?
解决方案
默认情况下,和的基本接口是req
和。在 API Routes 中使用时,您应该将它们设置为并向工厂函数提供泛型,如下所示:res
IncomingMessage
ServerResponse
NextApiRequest
NextApiResponse
import { NextApiRequest, NextApiResponse } from "next";
import nc from "next-connect";
const apiRoute = nc<NextApiRequest, NextApiResponse>({
onError(error, req, res) {
res.status(501).json({ error: `Sorry something Happened! ${error.message}` })
},
onNoMatch(req, res) {
res.status(405).json({ error: `Method '${req.method}' Not Allowed` })
},
})
apiRoute.post((req, res) => {
res.status(200).json({ data: 'success' })
})
它将为您提供正确的类型,以便您可以使用对象status
的方法而res
不会出现任何 TypeScript 错误。
请参阅文档。
推荐阅读
- nginx - nginx代理子目录到同一台机器上的子域
- python - 我想删除最后一项 discord.py
- java - 如何告诉 Swagger V3 我的“Java 日期”只是一个“日期”,而不是“日期时间”?
- javascript - 将 node_module css 文件导入 NextJs
- android - 如何管理 html 字体大小,以便对 iOS 和 Android 进行相同的解析
- sql - 子查询中是否需要 FOR UPDATE?
- c# - 为什么当我通过 POST API 调用将时间发送到后端时,会额外增加 5 个小时?
- docker - 使用 DOCKER-USER 链 iptables 允许传出流量
- c - C语言求一组数的整数除数
- python - 为双指数曲线拟合找到 x?