使用tsc

到目前为止tsc已用于编译单个文件。通常,程序会有多个文件进行编译。值得庆幸的是tsc可以处理多个文件作为参数。

a.ts

  1. export const A = (a) => console.log(a);

b.ts

  1. export const B = (b) => console.log(b);

TypeScript1.8.2之前:

  1. $ tsc ./a.ts ./b.ts
  2. a.ts(1,1): error TS1148: Cannot compile modules unless the '--module' flag is provided.

嗯。 这个模块标志的处理是什么? TypeScript有一个帮助菜单,让我们来看看:

  1. $ tsc --help | grep module
  2. -m KIND, --module KIND Specify module code generation: 'commonjs', 'amd', 'system', 'umd' or 'es2015'
  3. --moduleResolution Specifies module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6).

(TypeScript比我们显示的更多帮助;为了简洁,我们通过grep过滤)。有两个引用“module”的帮助条目,—module是一个TypeScript所抱怨的。 该描述解释了TypeScript支持许多不同的模块方案。 目前,commonjs是可取的。 这将产生与node.js的模块系统兼容的模块。

  1. $ tsc -m commonjs ./a.ts ./b.ts

TypeScript1.8.2之后,tsc有一个默认规则—module选项:target ===’ES6’? ‘ES6’:’commonjs’(更多细节可以在这里找到),所以我们可以简单地运行:

  1. $ tsc ./a.ts ./b.ts

tsc应该不产生输出。 在许多命令行传统中,没有任何输出实际上是成功的标志。 列出目录内容将确认我们的TypeScript文件已经编译完成。

  1. $ ls
  2. a.js a.ts b.js b.ts

非常好 - 现在有两个JavaScript模块可供使用。
即使项目很小告诉tsc命令编译什么非常乏味和麻烦的。 幸运的是TypeScript有一个简化这个的方法。 tsconfig.json文件让程序员写下他们想要的所有编译器设置。 当运行tsc时,它会查找tsconfig.json文件并使用它们的规则来编译JavaScript。
对于Angular 2项目,有一些特定的设置需要在项目的tsconfig.json中配置。

  1. {
  2. "compilerOptions": {
  3. "module": "commonjs",
  4. "target": "es5",
  5. "emitDecoratorMetadata": true,
  6. "experimentalDecorators": true,
  7. "noImplicitAny": false,
  8. "removeComments": false,
  9. "sourceMap": true
  10. },
  11. "exclude": [
  12. "node_modules",
  13. "dist/"
  14. ]
  15. }