我想创建将记录器附加到请求的自定义express.Request
类型。
我不想覆盖原始的express.Request
表达式,而是创建一个扩展它的新表达式,因为该应用程序的某些部分具有将其他自定义属性附加到请求的其他中间件。
因此,在global.d.ts
中,我定义了扩展的Request接口。
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 {}
}
然后在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;
但是我收到此错误:
类型'(req:AppRequest,res:AppResponse,下一个:AppNextFunction)=> void'的参数不能分配给'PathParams'类型的参数。 类型'((req:AppRequest,res:AppResponse,下一个:AppNextFunction)=> void'缺少类型'(string | RegExp)[]'中的以下属性:pop,push,concat,join和另外25个。>
我检查了express.RouterHandler
,发现它使用了express.RequestHandlerParams
,它使用了Request, Response, NextFunction
类型,我的AppRequest
不是有效的express.Request
吗?