从Typescript中的其他模块引用模块的正确方法

时间:2015-06-22 19:30:24

标签: node.js typescript

我正在使用Typescript为NodeJS编写一个模块。我正在尝试使用此模块处理请求(应该是IncomingMessage对象)。

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

当尝试确保传入的请求参数req是这样的实例时,我发现我无法从http模块引用任何内容。我觉得自己“好吧,所以我需要导入它,因为那只是一个别名”。但是,当我这样做时,我收到“命名空间中的导入存档无法引用模块”。

/// <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 个答案:

答案 0 :(得分:1)

如果您正在编写模块,那么您编写的任何内容都不在全局范围内 - 文件本身就是一个模块,其中的所有内容都限定在该模块中。

import http = require('http');

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

在上面的示例中,文件rateLimiter.ts是模块。 http已导入rateLimiter模块。

您需要使用模块标志进行编译 - 例如:

tsc --module commonjs rateLimiter.ts

大多数编辑器和IDE也提供了设置它的方法。