typescript - Anpassad request- och responstyp för express-routern
Jag vill skapa en anpassad express.Request-typ som fäster en logger till förfrågan.
Jag vill inte skriva över den ursprungliga express.Request i Express utan istället skapa en ny som utökar den, eftersom vissa delar av appen har annan middleware som lägger till andra anpassade egenskaper till förfrågan.
Så i en global.d.ts definierar jag det utökade Request-gränssnittet.
import { NextFunction, Request, Response } from "express";
import { Logger } from "pino";
declare global {
interface AppRequest extends Request {
log: Logger;
}
interface AppResponse extends Response {}
interface AppNextFunction extends NextFunction {}
}
Sedan i some-app-router.ts:
import { Router } from "express";
const router = Router();
function validateSecretMiddleWare(req: AppRequest, res: AppResponse, next: AppNextFunction):void {
if (process.env.STATS_SECRET !== req.query.secret) {
res.sendStatus(404);
return;
}
next();
}
router.use(validateSecretMiddleWare);
export default router;
Men jag får detta fel:
Argument av typen '(req: AppRequest, res: AppResponse, next: AppNextFunction) => void' kan inte tilldelas parametern av typen 'PathParams'. Typen '(req: AppRequest, res: AppResponse, next: AppNextFunction) => void' saknar följande egenskaper från typen '(string | RegExp)[]': pop, push, concat, join, och 25 till.
Jag inspekterade express.RouterHandler och såg att det använder express.RequestHandlerParams, som använder Request, Response, NextFunction-typer, är inte min AppRequest en giltig express.Request?