【发布时间】:2018-11-07 12:07:25
【问题描述】:
我想将 Node 10 中的 http2 模块与 Express 和 TypeScript (2.8.x) 结合使用。
In 可以实例化一个服务器,例如:
import * as http2 from "http2";
let server = http2.createServer({}, app).listen(8080);
问题是我会收到app 的类型错误。问题是http2.createServer 希望第二个参数是类型:
(request: http2.Http2ServerRequest, response: http2.Http2ServerResponse) => void
问题是根据@types/express,app的类型是(apparently):
(req: Request | http.IncomingMessage, res: Response | http.ServerResponse): any
现在我可以像这样做一个丑陋的演员:
import * as http2 from "http2";
let server = http2.createServer({}, (app as any) as ((request: http2.Http2ServerRequest, response: http2.Http2ServerResponse) => void)).listen(8080);
但是当我编写我的 Express 处理程序时,问题确实是稍后,看来我必须将它们写成:
(req: express.Request, res: express.Response) => {
let req2 = (req as any) as http2.Http2ServerRequest;
let res2 = (res as any) as http2.Http2ServerResponse;
...
}
...为了访问所有http2 功能,如推送,不是吗?
所以我必须在两端都进行这些演员表。现在,如果有一个 @types/express-http2 具有所有 Express 类型,但假设底层核心为 http2,那么我认为这些都不一定。但我找不到这样的东西。
我认识到这是一个棘手的打字问题,因为据我所知,所有 Express 打字都是在假设 http 作为底层服务层的情况下编写的。据我了解,Express 本身适用于 http2,但问题是打字工作不干净。
我错过了什么吗?
附: - 我更喜欢 Express,但如果有另一个基于 Node 的 Web 框架更好地支持 http2 和 TypeScript 的组合,我也可以考虑。
【问题讨论】:
标签: node.js typescript express http2