在最新版本的 TypeScript(撰写本文时为 1.5)中,您将使用 ES6 样式的模块导入:
import * as Alias from "./app.run";
SystemJS
并使用模块类型进行编译。
tsc --module systemjs app.ts
这应该是您想要的最简单的途径。SystemJS 支持是 1.5 的全新支持。
关于内部/外部模块的注释...
关于内部和外部模块有很多混淆,但我(强烈)建议您不要混合使用内部和外部模块。
内部模块背后的想法是模拟一种在编写 JavaScript 时使用的通用模式来隐藏信息,而不是将其放在全局范围内。道格·克罗克福德(Doug Crockford)对此进行了宣传。本质上,如果你有这个 JavaScript:
var name = 'Nicky';
function sayHello() {
return 'Hello ' + name;
}
您可以进出全局范围name
并将sayHello
足迹减少到单个变量:
var myNamespace = (function() {
var name = 'Nicky';
return {
sayHello: function () {
return 'Hello ' + name;
}
};
}());
这是令人钦佩的,因为有可能另一个库会定义name
或者sayHello
最后加载的那个会获胜。
对于外部模块,文件就是模块。这实际上比上面的命名空间示例要好一个,因为全局范围内没有任何内容。当你加载一个模块时,你给它一个本地名称并且没有污染。因此,您不需要将外部模块组织成内部模块或命名空间。事实上,尝试这样做会使您的代码变得更糟,而不是更好。
TypeScript 团队正在将内部模块重命名为“命名空间”——请参阅TypeScript 1.5 发行说明中“简化模块”下的说明。虽然这将解决“内部”或“外部”之间的混淆,但我认为它不会完全解决组合这两种模式的混淆。
考虑到你的名声史蒂夫,我相信
没有人有声誉,这意味着他们的话应该是无懈可击的——所以用你自己的经验来做出最终的决定。在这种情况下,您应该从骨子里感觉到内部和外部模块的组合正在创建不舒服的代码而没有增加任何好处;但我可能是错的。