TypeScript 编译上下文
编译上下文是一个术语,表示将解析和分析的 TypeScript 文件的分组,以确定什么是有效的,什么是无效的。编译上下文包含有关使用哪些编译器选项的信息。我们可以使用 tsconfig.json 文件来定义这个 TypeScript 文件的逻辑分组。
我们可以使用 tsc <文件名>.ts 命令来编译 TypeScript 文件。当我们使用 “$tsc” 命令编译 TypeScript 代码时,编译器会搜索在 tsconfig.json 文件中加载的配置。TypeScript 还提供了一种编译大型项目中多个 .ts 文件的选项。
tsconfig.json
tsconfig.json 文件是一个以 JSON 格式表示的文件。在 tsconfig.json 文件中,我们可以指定各种选项,告诉编译器如何编译当前项目。
在任何新的 TypeScript 项目中,第一步都是添加 tsconfig.json 文件。要创建 tsconfig.json 文件,请打开文件夹,然后在根目录下添加一个名为 “tsconfig.json” 的新文件。
我们可以通过以下两种方式之一编译 TypeScript 项目:
- 通过调用没有输入文件的 tsc: 在这种情况下,编译器从 当前目录 开始搜索 tsconfig.json 文件,然后跟随 parent directory 链。
- 通过调用没有输入文件和 –project(或只是 -p)命令的 tsc: 在这种情况下,编译器指定包含 tsconfig.json 文件的目录的路径。它还指定了一个到包含配置的有效 .json 文件的路径。
创建 tsconfig.json 文件
我们可以使用以下命令在项目的 root 文件夹中创建 tsconfig.json 文件。
$ tsc --init
如果执行了上面的命令,则会创建一个默认的 tsconfig.json 文件。
{
"compilerOptions": {
"declaration": true,
"emitDecoratorMetadata": false,
"experimentalDecorators": false,
"module": "none",
"moduleResolution": "node",
"noFallthroughCasesInSwitch": false,
"noImplicitAny": false,
"noImplicitReturns": false,
"removeComments": false,
"sourceMap": false,
"strictNullChecks": false,
"target": "es3"
},
"compileOnSave": true
}
包含和排除属性
包含(include) 和 排除(exclude) 属性允许我们采用一个数组模式,以添加或删除 TypeScript 文件的编译过程中的列表。
{
"compilerOptions": {
"module": "system",
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": true,
"outFile": "../../built/local/tsc.js",
"sourceMap": true
},
"include": [
"src/**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
compilerOptions 属性
我们可以使用 compilerOptions 来自定义编译器选项属性。它允许指定将附加选项传递给 TypeScript 编译器。以下是一些重要的编译器选项:
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
--allowJs | boolean | false | 允许编译 JavaScript 文件。 |
--alwaysStrict | boolean | false | 以严格模式解析并为每个源文件发出 “use strict”。 |
--baseUrl | string | 这是解析非目录模块名称的基本目录。 | |
--build–b | boolean | false | 用于构建项目及其由项目引用指定的所有依赖项。 |
--declaration–d | boolean | false | 它生成一个相应的 .d.ts 文件。 |
--diagnostics | boolean | false | 它显示诊断信息。 |
--experimentalDecorators | boolean | false | 启用 ES 装饰器的实验支持。 |
--isolatedModules | boolean | false | 用于将每个文件转换为单独的模块。 |
--module–m | string | target === “ES3” 或 “ES5” ? “CommonJS” : “ES6” | 输出模块类型,例如“CommonJS”,AMD,System,ES6,ES2015 或 ESNext。如果目标属性是 ES3 或 ES5,则默认值为 CommonJS;否则默认为 ES6。 |
--moduleResolution | string | module === “AMD” 或 “System” 或 “ES6” ? “Classic” : “Node” | 确定如何解析模块。要么为 “Node”,表示 Node.js/io.js 风格的解析方式,要么是 “Classic”。 |
--noEmitOnError | boolean | false | 如果有任何错误报告,则不要发出输出。 |
--outDir | string | 将输出结构重定向到目录。 | |
--sourceMap | boolean | false | 生成一个相应的 .map 文件。它有助于调试。 |
--target–t | string | “ES3” | 指定 ECMAScript 目标版本: “ES3” (默认), “ES5”, “ES6″/”ES2015”, “ES2016”, “ES2017” 或 “ESNext”。 |
--watch–w | 运行编译器以观察模式。这意味着每当更改任何源文件时,编译过程将重新触发以再次生成已转换的文件。 |
要查看完整的编译器选项列表,请转到 官方页面。
compileOnSave
它是一个属性,用于设置 IDE 自动编译所包含的 TypeScript 文件并生成输出。它表示向 IDE 发信号,要在保存 tsconfig.json 的所有文件时生成所有文件。
{
"compileOnSave": true,
"compilerOptions": {
"noImplicitAny" : true
}
}