【问题标题】:Property 'status' does not exist on type 'ServerResponse' (TS2339)“ServerResponse”类型不存在属性“status”(TS2339)
【发布时间】:2021-07-04 15:37:42
【问题描述】:

我尝试创建一个界面,安装反应类型,唯一可行的方法是当我将代码放入 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
  },
};

如何修正打字错误?

【问题讨论】:

  • console.logres里面是什么,如果res真的包含状态函数。

标签: reactjs typescript next.js


【解决方案1】:

默认情况下,reqres 的基本接口是 IncomingMessageServerResponse。在 API Routes 中使用时,您应该将它们设置为 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 错误。

请参阅docs

【讨论】:

    猜你喜欢
    • 2016-03-14
    • 2017-02-25
    • 2021-11-24
    • 2019-01-11
    • 2021-05-08
    • 2021-10-15
    • 2020-12-13
    • 2021-08-04
    • 2020-07-01
    相关资源
    最近更新 更多