使用TypeScript的Express路由的返回类型

时间:2019-02-09 05:39:09

标签: node.js typescript express

我正在尝试充分利用TypeScript的潜力,因此,如果可能的话,我会避免使用any

我已经看到Express路由的定义如下:

import { Request, Response } from "express";

myRouter.route("/foo").post((req: Request, res: Response): Response => {
  return res.send("Hello World");
});

之所以可行,是因为send()返回了明确的Response

但是,如果我执行重定向:

myRouter.route("/bar").post((req: Request, res: Response): Response => {
  return res.redirect("/baz");         // redirect() returns void!
});

由于redirect()返回void,而不是Response,因此无法编译。

选项:

  • 简单的解决方法是使路线返回any,但我想尽可能避免这种情况
  • 我见过执行as unknown as Response的代码,但看起来像是黑客

不使用any声明路由返回类型的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

根据@jfriend的评论,回调的declaration for RequestHandler为:

(req: Request, res: Response, next: NextFunction): any;

因此在这种情况下使用any是可以的。

但是,将其声明为void可能会更好,因为Express并不期望返回值。这就是我正在做的事情,并且我认为此处的输入是“错误的”(如果不是这种情况,并且存在有效的用例,请告诉我)。