【问题标题】:request.url undefined type, why?request.url 未定义类型,为什么?
【发布时间】:2020-02-11 03:04:45
【问题描述】:

为什么 request.url 在 nodejs 类型中被定义为可选? 如果一个请求来到 http 服务器应该有定义的 url。

为什么这里有问号? url?: string;

https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/node/http.d.ts#L288

【问题讨论】:

  • 你看上面的评论了吗?
  • 是的,但是如果请求无效,为什么存在 IncomingMessage? (我对nodejs很陌生,我不知道细节)
  • url 仅对来自http.Server 的请求有效,大概有来自其他地方的请求实现了IncomingMessage,但不需要url

标签: node.js typescript httpserver definitelytyped


【解决方案1】:

我对 node 中的 http/Request 了解不多,但这似乎是不良建模的经典示例(通常在 @types/node 定义中找到,或者是由于类型如何具有已写入或用于 node.js API 本身的底层设计)。

IncomingMessage 被建模为具有可选键的产品类型,而不是作为适当的总和类型 - 以区分客户端请求和服务器生成请求的情况。然后将关于不变量的注释放在单个字段之上,使它们在 TS/静态类型检查方面毫无用处。

仅阅读该定义,更好的类型 def 可能是:

interface ClientIncomingMessage extends stream.Readable {
  // ... many other fields ...
  url: string;
}

interface ServerIncomingMessage extends stream.Readable {
  // ... many other fields ...
  // no `url` fields here!
}

type IncomingMessage = ClientIncomingMessage | ServerIncomingMessage

【讨论】:

猜你喜欢
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
相关资源
最近更新 更多