【问题标题】:Typescript - require AMD module like a namespace打字稿 - 需要像命名空间一样的 AMD 模块
【发布时间】:2014-10-16 18:26:16
【问题描述】:

为了将 Typescript 与 requireJs 一起使用,我在一个通用 export 模块中创建了两个 export 类。这使我可以像这样使用 requireJs 加载它们:

require(["class1", "class2"], function (_class1, _class2) {
    var x = new _class1.mymodule.class1();
    var y = new _class2.mymodule.class2();
}

这是其中一个-文件的示例

export module mymodule {
    export class class1 {
        //some props and functions
    }
}

经过长期研究,我没有弄清楚如何以这样的方式仅引用模块:

// not working code ahead:
require(["class1", "class2"], function (mymodule) {
    var x = new mymodule.class1();
    var y = new mymodule.class2();
}

最后一个代码块是 script HTML 标记中的纯 javascript。

【问题讨论】:

    标签: requirejs typescript amd


    【解决方案1】:

    而不是写

    export module mymodule {
        export class class1 {
            //some props and functions
        }
    }
    

    写这个

    export class class1 {
        //some props and functions
    }
    

    没有必要用外部模块将你的类包装在一个命名空间中,因为它们的导入器可以决定引用它们的名称。另请参阅 TypeScript 文档的“Needless Namespacing”部分。

    【讨论】:

    • 如果你把所有的类放在一个.ts 文件中,这很好用。但是,当您想将class1.tsclass2.ts 导入到像“mymodule”这样的依赖变量中时,您会怎么做?
    • 你不能,不管你用不export module mymodule {
    【解决方案2】:

    好的,这不是我想象的,但它对我来说是一种解决方案。这是我想出来的:

    • 不要class1class2 等内部依赖项上使用 export
    • 如果您在 class1 中需要 class2,只需使用 <reference path="class2" /> 引用 typescript 文件以获取 TSLint 的声明
    • 创建一个包装类型脚本文件并引用所有依赖项,如下所示:

    wrapper.ts

    /// <reference path="test/class1.ts" />
    /// <amd-dependency path="class1" />
    /// <reference path="test/class2.ts" />
    /// <amd-dependency path="class2" />
    
    export var class1: class1;
    export var class2: class2;
    

    javascript 块

    require(["wrapper"], function () {
        // do something with the dependencies
        var x = new class1();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 2014-01-19
      • 2016-09-04
      • 2023-03-19
      • 1970-01-01
      • 2015-05-01
      相关资源
      最近更新 更多