【问题标题】:Why in DefinitelyTyped `http.IncomingMessage` defined as interface, not a class?为什么在 DefinedlyTyped `http.IncomingMessage` 中定义为接口,而不是类?
【发布时间】:2017-01-12 13:11:37
【问题描述】:

正如 Node.js 的文档所述,http.IncomingMessageis a class,不是接口。那么为什么要在DefiniteTyped http.IncomingMessage defined as interface 中呢?

现在在我的代码中我不能这样做:

import * as http from 'http';
let Request = http.IncomingMessage;

TypeScript 错误:

[ts] 属性 'IncomingMessage' 不存在于类型 'typeof "http"' 上。

我做错了什么?

【问题讨论】:

  • 它的类那么你应该像这样使用它:let Request = http.IncomingMessage();
  • @ranakrunal9,不,http.IncomingMessage 用于 TypeScript 定义为接口,因此接口不能调用构造函数。
  • 所以要定义http.IncomingMessage类型的变量,你应该这样做:let Request: http.IncomingMessage;
  • @ranakrunal9,只需打开编辑器并检查自己。这是行不通的。

标签: node.js typescript


【解决方案1】:

我发现确实不存在用于扩展 http.IncomingMessage 的 Node.js API。这种方式更像是hack而不是正常的扩展:

http.IncomingMessage.prototype.absoluteUri = function absoluteUri(path) {
  // ...
};

found this 回答扩展http.IncomingMessage

var extendedRequest = {
  get userAgent() {
    this.request.headers['user-agent'];
  }
}

createServerCallback(function (req, res) {
  var request = Object.create(extendedRequest);
  request.request = req;
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 2012-08-20
    • 2017-01-08
    • 2017-08-12
    • 2017-02-02
    • 1970-01-01
    • 2021-12-05
    相关资源
    最近更新 更多