Я хочу создать пользовательский тип express.Request
, который присоединяет регистратор к запросу.
Я не хочу переопределять исходный express.Request
express, вместо этого создайте новый, расширяющий его, так как некоторые части приложения имеют другое промежуточное ПО, которое присоединяет другие пользовательские свойства к запросу.
Таким образом, в global.d.ts
я определяю расширенный интерфейс запроса.
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, next: AppNextFunction) => void' нельзя назначить параметру типа 'PathParams'.
Тип '(req: AppRequest, res: AppResponse, next: AppNextFunction) => void' отсутствуют следующие свойства из типа '(string | RegExp) []': pop, push, concat, join и еще 25.
Я проверил express.RouterHandler
и увидел, что он использует express.RequestHandlerParams
, который использует Request, Response, NextFunction
типы, не мой AppRequest
как действительный express.Request
?