Node.js 使用TypeScript的快速路线的返回类型
我试图使用TypeScript来充分发挥它的潜力,所以如果可能的话,我会避免使用任何Node.js 使用TypeScript的快速路线的返回类型,node.js,typescript,express,Node.js,Typescript,Express,我试图使用TypeScript来充分发挥它的潜力,所以如果可能的话,我会避免使用任何 我见过这样定义的快速路线: import { Request, Response } from "express"; myRouter.route("/foo").post((req: Request, res: Response): Response => { return res.send("Hello World"); }); 这是因为send()返回一个快速响应 但如果我重定向: myRo
我见过这样定义的快速路线:
import { Request, Response } from "express";
myRouter.route("/foo").post((req: Request, res: Response): Response => {
return res.send("Hello World");
});
这是因为send()
返回一个快速响应
但如果我重定向:
myRouter.route("/bar").post((req: Request, res: Response): Response => {
return res.redirect("/baz"); // redirect() returns void!
});
无法编译,因为redirect()
返回void,而不是Response
选项:
- 最简单的解决方法是使路线返回
任意
,但如果可能的话,我希望避免这种情况
- 我见过像响应一样未知的
代码,但这似乎是一种黑客行为
在不使用任何的情况下,声明路线返回类型的正确方法是什么?根据@jfriend的评论,回调的方法是:
因此,在这种情况下使用any
是可以的
但是,将其声明为void
可能更好,因为Express不希望返回值。这就是我正在做的,我认为这里的键入是“错误的”(如果不是这样,并且有一个有效的用例,请让我知道)。好吧,Express不关注返回值,所以正确的使用方法是定义无返回值的回调,而不返回值。因此,停止执行返回res.send()
,只需执行res.send()
和res.redirect()
。停止使用返回按钮
。如果没有返回值并且您只是试图完成函数的执行,则不需要return
,只需使用普通的return代码>。无论如何,我都不喜欢return res.send()
语法,即使在普通Javascript中也是如此,因为它意味着返回一个有意义的返回值,而事实并非如此。@jfriend00键入声明了一个返回值。。。因此,您认为最好忽略它们并将其声明为post(…):void
?不,您找错地方了。这与.post()
返回的内容无关。这是关于您传递的回调返回的内容,以及如何声明回调来匹配它。回调不应返回任何内容。All.post()
是否注册回调以便稍后调用它,并返回调用它的对象以便链接事物.post()
本身在服务器初始化时被调用(以注册路由处理程序)-当路由实际被命中时,它不会被调用。传递给.post()
的回调称为路由处理程序。@jfriend00 DOH!你说得对!当我创建这个问题时,我没有粘贴我真正的代码——我的处理程序在一个单独的类中,因此它们更容易测试,当我键入上述内容时,我查看了错误的声明文件。您是对的,RequestHandler
回调被定义为(req:Request,res:Response,next:NextFunction):any代码>。。。所以它返回any
,所以我很乐意这样做。不过,你关于不要不必要地返回的评论很有帮助(我会在其他语言中这样做)。我不是打字专家,所以这里没有建议。我不喜欢在调用方不使用返回值时返回值的代码(因为我认为这会产生误导性代码),所以我可能会做一些与此一致的事情。void
可能是更好的选择,因为它是精确的返回类型,从那时起,他们似乎改进了RequestHandler
的类型。今天,它是(req:Request,res:Response,next:NextFunction):void代码>。
(req: Request, res: Response, next: NextFunction): any;