Typescript - 要求AMD模块像命名空间

时间:2014-10-15 15:06:04

标签: requirejs typescript amd

要将Typescript与requireJs一起使用,我在一个常见的 export 模块中创建了两个 export 类。这允许我使用 requireJs 加载它们:

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

以下是其中一个 class -files

的示例
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();
}

最后一个代码块是脚本 HTML标记中的普通javascript。

2 个答案:

答案 0 :(得分:1)

而不是写

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

写这个

export class class1 {
    //some props and functions
}

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

答案 1 :(得分:1)

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

  • 对内部依赖关系使用export,例如 class1 class2
  • 如果您需要 class1 中的 class2 ,只需使用<reference path="class2" />引用typescript文件以获取 TSLint 的声明
  • 创建一个包装器typescript文件并引用所有依赖项,如下所示:

<强> 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();
}