据我所知,typescript 还不支持组合外部模块。来自他们在 codeplex 上的 wiki:
TypeScript 在外部模块源文件和它们发出的 JS 文件之间具有一一对应的关系。这样做的一个影响是无法使用 --out 编译器开关将多个外部模块源文件连接到单个 JavaScript 文件中。
但是,您可以通过在 typescript 中使用 internal modules 来做一个技巧,因为 tsc 编译器能够将它们编译成单个文件,然后您可以再添加一个文件整个命名空间的module.exports 指令使其成为 CommonJS 模块。
这里是一步一步的例子。假设您将以下内部模块拆分为三个文件:
Validation.ts:
module Validation {
export interface StringValidator {
isAcceptable(s: string): boolean;
}
}
ZipCodeValidator.ts
/// <reference path="Validation.ts" />
module Validation {
var numberRegexp = /^[0-9]+$/;
export class ZipCodeValidator implements StringValidator {
isAcceptable(s: string) {
return s.length === 5 && numberRegexp.test(s);
}
}
}
LettersOnlyValidator.ts
/// <reference path="Validation.ts" />
module Validation {
var lettersRegexp = /^[A-Za-z]+$/;
export class LettersOnlyValidator implements StringValidator {
isAcceptable(s: string) {
return lettersRegexp.test(s);
}
}
}
如果您使用 tsc compiler 中的 --out 参数编译这些文件,您可以将它们合并到一个文件中。但是,这并不能使它们成为 CommonJS 模块。要导出它们,您可以使用一个技巧添加一个名为 ValidationExport.ts 的 ts 文件,其中包含命名空间的导出指令:
var module: any = <any>module;
module.exports = Validation;
然后您可以运行 tsc 命令将所有内容编译到一个名为“validationmodule.js”的文件中:
tsc --out validationmodule.js Validation.ts ZipCodeValidator.ts LettersOnlyValidator.ts ValidationExport.ts
输出是一个可以在 Node.js 中使用的 CommonJS 模块:
var Validation = require("./validationmodule");
var zipCodeValidator = new Validation.ZipCodeValidator();
var lettersOnylValidator = new Validation.LettersOnlyValidator();
console.log(zipCodeValidator.isAcceptable("16211"));
console.log(lettersOnylValidator.isAcceptable("5555"));