通过RequireJS从javascript调用TypeScript模块
在javascript中访问TypeScript模块时,我似乎必须进行完整命名。这是正确的吗 我的打字稿是:通过RequireJS从javascript调用TypeScript模块,javascript,requirejs,typescript,Javascript,Requirejs,Typescript,在javascript中访问TypeScript模块时,我似乎必须进行完整命名。这是正确的吗 我的打字稿是: export module App.editor.menu { export class File { static isOpenEnabled() { return false; } static openClicked() { debugger; } }
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的例子,所以我想这可能会有所不同
在这种情况下需要完整的名称空间吗?名称空间的思想是避免名称冲突,并明确指定特定类型或变量的域。这在.NET中很重要,因为所有必需类型的可传递闭包都被加载到一个域中,名称冲突将是非常有问题的 在外部模块中,这是完全不必要的,因为加载您的代码可以精确定义您绑定到的标识符,而调用方只能“看到”他们显式导入的代码 通常,您不应该有一个TypeScript文件,该文件的唯一顶级元素是导出模块。将所有内容移到外面,并将
export
放在上面,以便您的呼叫者更容易找到它。在您的特定示例中,您的文件应该只说:
export class File { ... }
不在一个模块中(除非你有一堆其他的子模块你真的想通过一个外部模块暴露出来,这是不可能的)。如果我去掉了模块部分,如果我在别处创建另一个文件类,这不意味着名称冲突吗?不。这就是外部模块的全部想法-默认情况下,它们位于不同的名称空间中。感谢您提供的信息,Ryan。我对RequireJS没有做太多的工作,对此我一直很好奇。此外,我还对您的答案提交了一个小编辑:首先谢谢你。我想确保我明白这一点。只要.js文件中没有全局代码,并且我总是使用RequireJS define()访问它,那么我就可以有8个具有相同类名的.js文件,因为我通过define()获取对象,所以我很安全,因为我只使用返回的对象。这是对的吗?还有。。。应该这样做吗?在这种情况下不使用名称空间对我来说是非常错误的,因为我来自C/Java世界。这是正确的方法吗?