Пользовательский запрос и тип ответа для экспресс-маршрутизатора - PullRequest
0 голосов
/ 09 января 2019

Я хочу создать пользовательский тип 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...