明确指定 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(和 reqres)但这并没有解决。查看类型定义,我对 typedef 如何编写创建内部“e”引用感到困惑......

很惊讶我找不到任何人询问并解决此问题,因为 express.d.ts 类型定义已针对 ExpressJS 4.0 进行了更新(之前我发现了对 ExpressServer 的引用,但今天不存在。

想法?

【问题讨论】:

【参考方案1】:

经典案例“工作一段时间没有成功,但当你最终发布一个寻求帮助的问题时,你会立即解决”。

解决办法: 当您想使用其中一种类型时,您必须导入模块,因为 typedef 位于 typedef 内的命名模块中。

在上面的代码(位于我的 app.ts 中)中,我得到了 app 上的类型注释。因为我在文件顶部的导入语句是 import express = require('express');,所以我可以像这样注释 reqres 参数:

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 与连接

为啥express要指定静态资源托管

Visual C# 2010 Express:为新类指定默认访问修饰符?

如何使用 Express.js 指定 HTTP 错误代码?

Node js之Express初步介绍和安装