通过RequireJS从javascript调用TypeScript模块

时间:2013-11-08 22:15:10

标签: javascript requirejs typescript

在javascript中访问TypeScript模块时,我似乎必须完全命名。这是对的吗?

我的TypeScript是:

export module App.editor.menu {

    export class File {
        static isOpenEnabled() {
            return false;
        }

        static openClicked() {
            debugger;
        }
    }
}

我的javascript是:

Ext.onReady(function () {

    define(["../../scripts/ribbon", "./menu-handler"], function (ribbon, handler) {

我必须调用“handler.App.editor.menu.File.isOpenEnabled()”而不是“handler.isOpenEnabled()”

我见过的所有示例都不需要包含命名空间。但是我没有看到任何一半是TypeScript,半javascript的例子,所以我认为这可能会有所不同。

在这种情况下是否需要完整的命名空间?

1 个答案:

答案 0 :(得分:1)

命名空间的想法是,您希望避免名称冲突并明确指定特定类型或变量的域。这在像.NET这样的事情中很重要,因为所有必需类型的传递闭包都被加载到一个域中,而名称冲突会很成问题。

在外部模块中,这完全没有必要,因为加载您的代码可以准确定义您绑定的标识符,并且调用者只会“看到”他们明确导入的代码。

通常,应该有一个只有顶级元素为export module的TypeScript文件。将所有内容移到外面并将export放在其上,以便您的呼叫者可以更轻松地找到它。在您的具体示例中,您的文件应该只写:

export class File { ... }

不在模块中(除非你有一堆其他细分,你真的想通过一个外部模块公开,这是不可能的)。