【问题标题】:Correct way to reference modules from other modules in Typescript从 Typescript 中的其他模块引用模块的正确方法
【发布时间】:2015-09-08 09:29:35
【问题描述】:

我正在 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 中包含的定义而导入一个模块。有人可以对此有所了解吗?

【问题讨论】:

    标签: node.js typescript


    【解决方案1】:

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

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

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

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

    tsc --module commonjs rateLimiter.ts
    

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

    【讨论】:

    • 对不起。你对范围界定的措辞是正确的。我想当这样说的时候,它在语义上也是有意义的。赞赏!
    猜你喜欢
    • 2012-07-26
    • 2012-05-05
    • 2020-06-13
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多