我正在尝试充分利用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
声明路由返回类型的正确方法是什么?
答案 0 :(得分:0)
根据@jfriend的评论,回调的declaration for RequestHandler为:
(req: Request, res: Response, next: NextFunction): any;
因此在这种情况下使用any
是可以的。
但是,将其声明为void
可能会更好,因为Express并不期望返回值。这就是我正在做的事情,并且我认为此处的输入是“错误的”(如果不是这种情况,并且存在有效的用例,请告诉我)。