【问题标题】:Typescript not exporting class for requirejs with internal modules打字稿没有为带有内部模块的requirejs导出类
【发布时间】:2015-05-21 01:33:03
【问题描述】:

打字稿:

import classModule = require("path/to/class");

module my.namespace {
  export class MyClass {
    constructor() {
       var someClass = new classModule.className();
    }
  }
}

生成的 JAVASCRIPT:

define(["require", "exports", "path/to/class"], function (require, exports, classModule) {
    var my;
    (function (my) {
        var namespace;
        (function (namespace) {
            var MyClass = (function () {

                function MyClass () {

                    var someClass = classModule.className();

                }
                return MyClass ;
            })();
            namespace.MyClass = MyClass ;
        })(namespace = my.namespace || (my.namespace = {}));
    })(my || (my = {}));
});

因此,它不会导出“MyClass”,因此它不适用于导入它的模块。

如果我删除打字稿

module my.namespace

确实如此:

. . .
return MyClass;

})();
exports.MyClass= MyClass;

如何让它导出用内部模块包装的 MyClass?

我可以手动导出它,但我认为这应该可行。 我知道内部模块命名空间不是最好的,但我有大量代码包装在 Typescript 模块中。我正在使用 Visual Studio 并为该项目设置了 AMD 标志。打字稿 1.4。我正在使用 require(["myclass"]) 调用加载“MyClass”。

【问题讨论】:

    标签: requirejs typescript


    【解决方案1】:

    如果要导出模块(及其内容),则需要export 包含该类的模块。

    实际上,在外部模块中拥有顶级“命名空间”模块的理由为零。请参阅TypeScript Handbook中的“不必要的命名空间”

    【讨论】:

    • 我试过了:export my.namespace { export MyClass { -- 它没有生成导出
    • 它确实导出了对象my.namespace.MyClass
    • 是的。我错过了 - 谢谢。是否有不使用 requirejs 的推荐打字稿模块模式?在那种情况下你必须使用脚本标签吗?
    • 只需从 top-level 对象中删除 export 关键字,并包含所有带有脚本标签的输出 .js。在这种情况下,您可以在命令行上使用 --out 将您的文件合并为一个 .js 文件(注意排序问题)。
    猜你喜欢
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2020-08-09
    • 2020-02-08
    • 2017-12-02
    相关资源
    最近更新 更多