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.
