使用Typescript AMD导出导入的模块

时间:2014-01-26 10:56:27

标签: requirejs typescript amd

假设我已经将这两个有趣的Typescript库实现为AMD模块。

MathBasics.ts

module MathBasics {
    export function add(a: number, b: number) {
        return a + b;
    }
    export function substract(a: number, b: number) {
        return a - b;
    }
}
export = MathBasics

MathAdvanced.ts

module MathAdvanced {
    export function mult(a: number, b: number) {
        return a * b;
    }
    export function div(a: number, b: number) {
        return a / b;
    }
}
export = MathAdvanced

如何在一个MathAll.ts库中将它们组合在一起,这样客户端代码就不必引用它们。

MathAll.ts

import MathBasics = require("MathBasics");
import MathAdvanced = require("MathAdvanced"); 

module MathAll {
    export var MathBasics: MathBasics;  
    export var MathAdvanced : MathAdvanced;
    //Error: Type reference cannot refer to container 

    export module MathBasics;
    export module MathAdvanced;
    //Error: '{' expected

    export MathBasics;
    export MathAdvanced;
    //Error: Unexpected token; 'module, class, interface, enum, import or statement' expected.

}

export = MathAll;

我现在不在乎是否有1或3个请求。我的问题更多的是关于开发便利而不是性能。

1 个答案:

答案 0 :(得分:2)

您只需将以下两行添加到MathAll.ts文件中即可:

export import MathBasics = require("MathBasics");
export import MathAdvanced = require("MathAdvanced"); 

这将允许您基本上使用MathAll psudeo-module ...

导入两者
import math = require('./MathAll');

math.MathAdvanced....

但是它会对你的自动完成造成一些破坏,并且有一些提示,这可能会在未来被禁止,这将破坏你的程序 - 所以要小心使用这个技巧。

所以现在我已经展示了你可以做什么,希望你会接受我的建议,你不这样做(因为你知道我不是说“不要这样做” “只是因为我不知道你怎么做。”

组织您的模块的方式使每个模块本身都可以进行导入。在我需要时导入MathBasics并在需要时导入MathAdvanced会非常困难吗?

如果您隐藏了实现细节,那么这是另一回事 - 但您绝对不会在export import时隐藏实现细节 - 因为您通过直接导出它们来展示所有细节。