2015-06-22 80 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