明确指定 Express 的“应用程序、请求、响应......”的类型
Posted
技术标签:
【中文标题】明确指定 Express 的“应用程序、请求、响应......”的类型【英文标题】:Explicitly Specifying types for Express' "application, request, response..." 【发布时间】:2015-02-24 22:21:56 【问题描述】:我正在努力更新一个简单的 NodeJS + ExpressJS 应用程序以使用 TypeScript。我已经让它工作了,但是我很适合添加一些额外的数据注释来在 Visual Studio 和 WebStorm 中添加额外的类型检查和代码时自动完成/智能感知。
我引用了最新的express.d.ts。我还创建了 Express 应用:
var app = express();
一切正常...但我似乎不知道如何为 app 添加类型信息以在您键入类似
的内容时提供自动完成帮助app.get('/',function(req,res));
我尝试使用 Express.Application
(和 .Request
和 .Response
)注释 app(和 req 和 res)但这并没有解决。查看类型定义,我对 typedef 如何编写创建内部“e”引用感到困惑......
很惊讶我找不到任何人询问并解决此问题,因为 express.d.ts 类型定义已针对 ExpressJS 4.0 进行了更新(之前我发现了对 ExpressServer 的引用,但今天不存在。
想法?
【问题讨论】:
【参考方案1】:经典案例“工作一段时间没有成功,但当你最终发布一个寻求帮助的问题时,你会立即解决”。
解决办法: 当您想使用其中一种类型时,您必须导入模块,因为 typedef 位于 typedef 内的命名模块中。
在上面的代码(位于我的 app.ts 中)中,我得到了 app 上的类型注释。因为我在文件顶部的导入语句是 import express = require('express');
,所以我可以像这样注释 req 和 res 参数:
app.get('/', function(req:express.Request, res:express.Response));
在我试图在 app 上获取类型注释的其他文件中,我错过了文件顶部的导入语句。添加后,我可以为此添加注释:
public init(app: express.Application)
【讨论】:
谢谢,我使用的是Express.Application
,它存在,但有不同的类型!
另一个很棒的事情是,您可以通过设置强制响应正文类型:js app.get('/', (req: Request, res: Response<SomeDto>) => )
Express.Request
& Express.Response
为我工作!【参考方案2】:
如果有人在 2017 年偶然发现这个问题并使用更现代的 TS。你应该可以npm install @types/express
,然后它应该就可以工作了。
【讨论】:
其他人遇到这个问题,请确保您正在做app = express()
,而不是app = new express()
同样在您将 js 文件移植到 ts 的场景中,请记住更改导入的所有要求,以便在 VS Code 中消失。【参考方案3】:
我认为其中一些答案可能已经过时了。以下对我有用:
import Request, Response from 'express';
【讨论】:
在app.use(function (req: Request, res: Response, next: ?) throw new Error('NoRoutesMatched'); );
中为下一个导入什么类型
@ShubhamShaw 我也导入了NextFunction,像这样import Request, Response, NextFunction from 'express';
然后像这样使用function myReqHandler (req: Request, res: Response, next: NextFunction) ...
您可以使用:import type Request, Response from 'express';
(提示:type
关键字)以上是关于明确指定 Express 的“应用程序、请求、响应......”的类型的主要内容,如果未能解决你的问题,请参考以下文章
nodejs 安装express的时候可以指定express的版本吗
Auth0 express-openid-connect 指定 IDP 与连接