Typescript 编译上下文
编译上下文是指一组将被解析和分析以确定什么是有效的和什么是无效的TypeScript文件的术语。编译上下文包含关于使用哪些编译器选项的信息。我们可以通过使用tsconfig.json文件来定义这个逻辑上的TypeScript文件组。
我们可以使用tsc命令来编译TypeScript文件。 < 文件名>.ts。当我们使用 ‘$tsc’ 命令编译TypeScript代码时,编译器会在 tsconfig.json 文件中搜索加载的配置。TypeScript还提供了一种在大型项目中编译多个 .ts 文件的选项。
tsconfig.json
tsconfig.json文件是一个 JSON 格式的文件。在tsconfig.json文件中,我们可以指定各种选项,告诉编译器如何编译当前项目。
任何新的TypeScript项目的第一步是添加一个tsconfig.json文件。要创建tsconfig.json文件,打开要存储源文件的文件夹,并添加一个名为 tsconfig.json 的新文件。
我们可以以以下方式之一编译TypeScript项目:
- 通过不带输入文件调用tsc: 在这种情况下,编译器从 当前目录 开始搜索tsconfig.json文件,并按照 父目录 链进行搜索。
- 通过不带输入文件和–project(或-p)命令调用tsc: 在这种情况下,编译器指定一个包含tsconfig.json文件的目录的路径。它还指定一个有效的 .json 文件的路径,该文件包含了配置信息。
创建tsconfig.json文件
我们可以使用以下命令在项目的 根目录 中创建一个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 | 布尔值 | false | 显示诊断信息。 |
--experimentalDecorators | 布尔值 | false | 启用对ES装饰器的试验性支持。 |
--isolatedModules | 布尔值 | false | 将每个文件编译为单独的模块。 |
--module–m | 字符串 | target === "ES3" or "ES5" ? "CommonJS" : "ES6" |
输出的模块类型,例如 “CommonJS”、”AMD”、”System”、”ES6″、”ES2015″或”ESNext”。 如果目标属性是ES3或ES5,则默认值为CommonJS; 其他情况下则默认为 ES6。 |
--moduleResolution | string | module === "AMD" or "System" or "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
}
}