首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTTP2的快速类型

HTTP2的快速类型
EN

Stack Overflow用户
提问于 2018-05-29 06:34:16
回答 2查看 1.2K关注 0票数 1

我希望将Node10中的http2模块与Express和TypeScript (2.8.x)结合使用。

在中可以使用以下内容实例化服务器:

代码语言:javascript
复制
import * as http2 from "http2";

let server = http2.createServer({}, app).listen(8080);

问题是我会得到一个app的类型错误。问题是http2.createServer希望第二个参数的类型为:

代码语言:javascript
复制
(request: http2.Http2ServerRequest, response: http2.Http2ServerResponse) => void

问题是,根据@types/expressapp的类型是(apparently):

代码语言:javascript
复制
(req: Request | http.IncomingMessage, res: Response | http.ServerResponse): any

现在我可以做这样一个丑陋的演员阵容:

代码语言:javascript
复制
import * as http2 from "http2";

let server = http2.createServer({}, (app as any) as ((request: http2.Http2ServerRequest, response: http2.Http2ServerResponse) => void)).listen(8080);

但问题是,当我编写Express处理程序时,我似乎必须将它们写成:

代码语言:javascript
复制
(req: express.Request, res: express.Response) => {
  let req2 = (req as any) as http2.Http2ServerRequest;
  let res2 = (res as any) as http2.Http2ServerResponse;
  ...
}

要访问所有的http2功能,如推送,不是吗?

所以我必须在两端都做这些模型。现在,如果有一个拥有所有Express类型的@types/express-http2,但假设一个底层核心是http2,那么我认为这些都不一定是。但我找不到这样的东西。

我认识到这是一个棘手的类型问题,因为据我所知,所有的Express类型都是以http作为底层服务层的假设编写的。据我所知,Express本身在http2上工作得很好,但问题是类型不能很好地工作。

我是不是遗漏了什么?

附注:我更喜欢Express,但如果有另一个基于Node的web框架能更好地支持http2和TypeScript的这种组合,我也可以考虑。

EN

回答 2

Stack Overflow用户

发布于 2018-05-30 02:09:22

这行不通的。在内部,express使用http模块。

你可以像现在这样转换它,但是当它最终是而不是a http2.Http2ServerRequest时,你通过将它转换为any,然后再转换为http2.Http2ServerRequest,这在某种程度上是一种黑客行为。

有一个支持http2的开放公关:https://github.com/expressjs/express/pull/3390

票数 0
EN

Stack Overflow用户

发布于 2018-05-31 02:55:37

我发现的一种方法是使用fastify。它们并不完全具有对http2的本地支持,但它们允许访问底层的原始请求对象。因此,当您启用http2支持时,访问fastify请求raw元素将返回一个http2.Http2ServerRequest

从TypeScript的角度来看,最好的部分是它们定义了类型,这样当您将配置选项传递给fastify时,它就会识别何时设置了http2标志并调整返回类型。通过这种方式,它是完全类型安全的(不需要强制转换为any和back )。

就目前而言,如果您想要http2和类型安全,fastify似乎是一个合理的方法。我还没有在生产中使用过它,所以我不能保证它的稳定性或性能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50574125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档