在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的例子,所以我认为这可能会有所不同。
在这种情况下是否需要完整的命名空间?
答案 0 :(得分:1)
命名空间的想法是,您希望避免名称冲突并明确指定特定类型或变量的域。这在像.NET这样的事情中很重要,因为所有必需类型的传递闭包都被加载到一个域中,而名称冲突会很成问题。
在外部模块中,这完全没有必要,因为加载您的代码可以准确定义您绑定的标识符,并且调用者只会“看到”他们明确导入的代码。
通常,不应该有一个只有顶级元素为export module
的TypeScript文件。将所有内容移到外面并将export
放在其上,以便您的呼叫者可以更轻松地找到它。在您的具体示例中,您的文件应该只写:
export class File { ... }
不在模块中(除非你有一堆其他细分,你真的想通过一个外部模块公开,这是不可能的)。