属性'status'在类型 'ServerResponse' 上不存在 (TS2339)



我尝试过创建一个接口,安装react类型,唯一的方法是将代码放在JavaScript中,但在TS项目中,它会给我错误:

类型"ServerResponse"(TS2339(上不存在属性"status">

这是代码:

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
},
};

如何安排打字?

默认情况下,reqres的基本接口为IncomingMessageServerResponse。在API路由中使用时,应通过向工厂函数提供泛型将它们设置为NextApiRequestNextApiResponse,如:

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' })
})

它将为您提供正确的键入,这样您就可以使用res对象的status方法而不会出现任何TypeScript错误。

请参阅文档。

相关内容

最新更新