0

看起来我在 javascript 中访问 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 的例子,所以我认为这可能会有所不同。

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

4

1 回答 1

1

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

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

一般来说,你不应该一个 TypeScript 文件,其唯一的顶级元素是export module. 把所有东西都移到外面并穿上export它,这样你的来电者就可以更容易地找到它。在您的具体示例中,您的文件应该只是说:

export class File { ... }

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

于 2013-11-08T22:28:42.723 回答