通过 RequireJS 从 javascript 调用 TypeScript 模块

Calling a TypeScript module from javascript via RequireJS

本文关键字:TypeScript 模块 调用 javascript RequireJS 通过      更新时间:2023-09-26

看起来我在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) {

我必须称"处理程序。App.editor.menu.File.isOpenEnabled()" 而不是 "handler.isOpenEnabled()"

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

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

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

在外部模块中,这是完全不必要的,因为加载您的代码可以准确定义绑定到的标识符,而调用方只会"看到"他们显式导入的代码。

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

export class File { ... }
而不是在模块

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