reactjs - Egenskapen 'status' eksisterer ikke på typen 'ServerResponse' (TS2339)


Jeg har prøvd å lage et grensesnitt, installere react-typer, den eneste måten dette fungerer på er når jeg legger koden i JavaScript, men i et TS-prosjekt gir det meg en feil:

Egenskapen 'status' eksisterer ikke på typen 'ServerResponse' (TS2339)

Her er koden:

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

Hvordan fikse typene?

Svar #1

Som standard er basisgrensesnittene til req og res IncomingMessage og ServerResponse. Ved bruk i API-ruter bør du sette dem til NextApiRequest og NextApiResponse ved å gi generikkene til fabrikkfunksjonen på denne måten:

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

Det vil gi deg de riktige typene, slik at du kan bruke status-metoden til res-objektet uten noen TypeScript-feil.

Se dokumentasjonen.

Relaterte artikler