2016-12-30 7 views
2

上記のNode.jsのドキュメントのように、http.IncomingMessageis a class、インターフェイスではありません。だからなぜDefinitelyTypedでhttp.IncomingMessagedefined as interfaceDefinitelyTypedの `http.IncomingMessage`が、インタフェースではなくクラスとして定義されているのはなぜですか?

今、私のコードでは、私はこれを行うことはできません。

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

活字体のエラーを:私は何か間違ったことをやっている

[ts] Property 'IncomingMessage' does not exist on type 'typeof "http"'.

+0

そのクラスあなたが好きそれを使用する必要があります: '聞かせて要求= http.IncomingMessage();' – ranakrunal9

+0

@ ranakrunal9、いいえ、TypeScriptの 'http.IncomingMessage'はinterfaceとして定義されているので、interfaceはコンストラクタを呼び出せません。 – ktretyak

+0

'http.IncomingMessage'型の変数を定義するには、' let Request:http.IncomingMessage; ' – ranakrunal9

答えて

0

私はそれが本当に存在しないことを参照してくださいNode.js拡張のためのAPI http.IncomingMessage。この方法でより多くのハックとしてではなく、通常の拡張:

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

私はhttp.IncomingMessageを拡張するために答えるfound this

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

createServerCallback(function (req, res) { 
    var request = Object.create(extendedRequest); 
    request.request = req; 
}); 
関連する問題