2015-06-22 119 views
3

我正在寫在打字稿一個的NodeJS模塊。我正在嘗試使用此模塊處理請求(應該是IncomingMessage對象)。正確的方式引用來自其他模塊的模塊打字稿

/// <reference path="typings/node/node.d.ts"/> 
module rateLimiter { 
    export function processRequest(req : http.IncomingMessage) : Boolean { 
    return false; 
    }; 
} 

當試圖確保進入的請求參數req是這樣的實例,我發現我不能從HTTP模塊引用任何東西。我想我自己「好吧,所以我需要導入它,因爲這只是一個別名」。當我這樣做,不過,我收到「命名空間中的進口delcarations不能引用的模塊。」

/// <reference path="typings/node/node.d.ts"/> 
module rateLimiter { 
    import http = require('http');//IMPORT DECLARATIONS IN A NAMESPACE CANNOT REFERENCE A MODULE 
    export function processRequest(req : http.IncomingMessage) : Boolean { 
    return false; 
    }; 
} 

因此,我想什麼似乎是一個錯誤的決定,進口在全球範圍內,只有收到「不能編譯模塊,除非--module標誌是爲」

/// <reference path="typings/node/node.d.ts"/> 
    import http = require('http');//CANNOT COMPILE MODULES UNLESS --MODULE FLAG IS PROVIDED 
module rateLimiter { 
    export function processRequest(req : http.IncomingMessage) : Boolean { 
    return false; 
    }; 
} 

我覺得我」從根本上忽略了這種參照應該如何進行。這感覺就像我不應該導入模塊只使用包含在node.d.ts.定義有人可以對此有所瞭解嗎?

回答

1

如果你正在寫一個模塊,沒有你寫的是在全球範圍內 - 該文件本身是一個模塊,和裏面一切的作用域是該模塊。

import http = require('http'); 

export function processRequest(req : http.IncomingMessage) : boolean { 
    return false; 
}; 

在上面的例子中,文件,rateLimiter.ts是模塊。 http被導入到rateLimiter模塊。

你需要編譯的模塊標誌 - 例如:

tsc --module commonjs rateLimiter.ts 

大多數編輯器和IDE提供一種方法來設置這一點。

+0

對不起。你說的範圍措辭是正確的。我猜想,如果這樣做的話,它在語義上也是有意義的。不勝感激! – TheToolBox