簡體   English   中英

“ServerResponse”類型不存在屬性“status”(TS2339)

[英]Property 'status' does not exist on type 'ServerResponse' (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
  },
};

如何解決打字問題?

默認情況下, reqres的基本接口是IncomingMessageServerResponse 在 API 路由中使用時,您應該通過向工廠 function 提供 generics 來將它們設置為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 object 的status方法而不會出現任何 TypeScript 錯誤。

請參閱文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM