node.js - TypeScript-fel: Ingen överlagring matchar detta anrop i Express-routens hanterare
Jag arbetar på en Express.js-applikation med TypeScript, och jag stöter på ett typerrors som jag inte kan lösa. Här är den relevanta koden:
import express from 'express';
import Stripe from 'stripe';
import { config } from '../config';
import { Request, Response } from 'express';
const router = express.Router();
// ... other code ...
router.post('/create-checkout-session', async (req: Request, res: Response) => {
// Route handler implementation
});
export default router;
När jag försöker kompilera detta får jag följande fel:
No overload matches this call.
The last overload gave the following error.
Argument of type '(req: Request, res: Response) => Promise<express.Response<any, Record<string, any>> | undefined>' is not assignable to parameter of type 'Application<Record<string, any>>'.
Type '(req: Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>, res: Response<any, Record<string, any>>) => Promise<...>' is missing the following properties from type 'Application<Record<string, any>>': init, defaultConfiguration, engine, set, and 63 more.
Felet verkar vara relaterat till typerna för parametern req och res i routhandlaren. Jag har importerat typerna Request och Response från 'express', men felet kvarstår. Här är mina frågor: Vad orsakar denna typmismatch? Hur kan jag korrekt typa routhandlaren för att lösa detta fel? Finns det några specifika TypeScript-konfigurationer eller typdefinitioner jag bör känna till när jag arbetar med Express? All hjälp eller insikter skulle uppskattas mycket. Tack!
Jag har försökt och observerat: Jag importerade typerna Request och Response från Express och använde dem för att typa route handler-parametrarna. Jag förväntade mig att detta skulle lösa typinkonsekvensen, eftersom dessa typer borde vara kompatibla med Express router-metoder. Dock kvarstår felet, vilket tyder på att det kan finnas ett problem med hur Express-typerna tolkas eller att det finns en mismatch mellan Express-versionen och de typdefinitioner som används.
Svar #1
returnera inte res. använd istället void return efter res. som
res.status(400).send({ message: 'You are not valid for this website.' });
return;
Svar #2
vänligen nedgradera @types/express-paketet för att åtgärda detta. Du kan göra det genom att köra npm i -D @types/express@4
