【发布时间】:2014-01-26 10:56:27
【问题描述】:
假设我已经将这两个有趣的 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 个请求被提出。我的问题更多是关于开发便利性而不是性能。
【问题讨论】:
-
import MathAll = require('MathAll'); var MathBasics = MathAll.MathBasics;比import MathBasics = require('MathBasics');更方便的是什么? -
如果不是两个模块而是像 10 个密切相关的模块,在一种情况下您有自动完成功能,而在另一种情况下您需要知道每个模块的名称。
-
模块的一个想法是阻止你做你想做的事情。因此,这根本不是一个好主意。一个模块应该是封闭的和独立的,作为一个“单元”。您的 MathAll 根本不是一个模块,因为它可以“添加”到。可变模块有点破坏了使用模块的所有好处,你也介意开始编写非 AMD JS 代码。
-
这里有更多有用的变化:stackoverflow.com/questions/30712638/…
标签: requirejs typescript amd