快速路由器的自定义请求和响应类型

时间:2019-01-09 10:30:59

标签: typescript express

我想创建将记录器附加到请求的自定义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吗?

0 个答案:

没有答案