使用 tsc --init
可以在当前的根目录下自动生成 tsconfig.json
配置文件。tsconfig.json
配置文件中是一个对象,其中包含很多的 key/value。
tsconfig.json
配置文件中可以写注释。
实际开发中,选择 TypeScript 模板时,tsconfig.json
配置文件都会被默认配置好的。
tsconfig.json
配置文件的作用:
tsconfig.json
配置文件有两个作用:
- 最主要的作用是让 TypeScript 编译器在编译的时候,知道如何编译 TypeScript 代码和进行类型检测。
例如:
将 TypeScript 编译成哪个版本的 JavaScript。
在编译过程中也会进行类型检测,如果发现类型错误,将会编译失败。 - 编辑器(比如 VSCode 等)会自动读取
tsconfig.json
配置文件中的配置信息,因此,在编辑器中编写 TypeScript 代码时,可以让编辑器判断 TypeScript 代码是否正确,给出代码提示。
tsconfig.json
配置文件在编译时是如何被使用的?
使用 TypeScript 编译器时:
- 在调用 tsc 命令时,如果没有文件参数,编译器将会由当前目录开始开始向父级目录寻找包含
tsconfig.json
配置文件的目录,读取配置信息并根据配置选项编译目录下的全部文件。 - 在调用 tsc 命令时,如果有文件参数(例如:
tsc index.ts
),tsconfig.json
配置文件将会被忽略。
在 Webpck 中使用 ts-loader
时:
在 Webpck 中使用 ts-loader
进行编译打包时,也会自动读取 tsconfig.json
配置文件,根据配置选项来编译 TypeScript 代码。
配置选项:
tsconfig.json
配置文件中的编译选项很多,常用配置选项的有:
-
include:是一个数组,用来指定需要被编译的文件目录,默认值是
[**/*]
。** 表示任意目录,* 表示任意文件。
// 所有 src 目录和 tests 目录下的文件都会被编译 "include": ["src/**/*", "tests/**/*"]
-
exclude:是一个数组,用来指定不需要被编译的文件目录,默认值是
["node_mudules", "bower_components", "jspm_packages"]
。// src/utils 目录下的文件都不会被编译 "include": ["./src/utils/**/*"]
-
files:是一个数组,用来指定需要被编译的文件。只有需要编译的文件很少时才会使用。
// 列表中的文件都会被TS编译器所编译 "files": [ "core.ts", "sys.ts", "types.ts", "scanner.ts", ]
-
extends:用来定义被继承的配置文件。
// 当前配置文件中会自动包含 config 目录下 base.json 中的所有配置信息 "extends": "./configs/base"
-
compilerOptions:编译选项,包含多个子选项,用来完成对编译的配置。
- target:用来指定 TS 被编译为的 JS 的版本。
// 编写的 TS 代码将会被编译为 ES6 版本的 JS 代码 "compilerOptions": { "target": "ES2015" }
- module:设置编译后的代码使用的模块化规范。
"compilerOptions": { "module": "commonjs" }
- lib:用来指定项目中要使用的库。一般情况下使用默认值,不需要改。
"compilerOptions": { "lib": ["ES6", "DOM"] }
- outDir:用来指定编译后文件的所在目录。默认情况下,编译后的 JS 文件会和 TS 文件位于相同的目录,设置 outDir 后可以改变编译后文件的位置。
// 设置后编译后的 JS 文件将会生成到 dist 目录 "compilerOptions": { "outDir": "dist" }
- outFile:用来将代码编译合并为一个 JS 文件。设置 outFile 后,所有全局作用域中的代码会编译合并到同一个文件中。
"compilerOptions": { "outFile": "dist/app.js" }
- rootDir:指定代码的根目录,默认情况下编译后文件的目录结构会以最长的公共目录为根目录,通过 rootDir 可以手动指定根目录。
- baseUrl:指定模块解析的根路径。当使用相对路径导入模块时,TypeScript 会以 baseUrl 为基准来解析这些路径。
- paths:创建模块的映射关系,可以将特定的模块名映射到实际的文件路径。
- allowJs:是否对 JS 文件编译。默认值为 false。
- checkJs:是否对 JS 文件进行检查。默认值为 false。
- removeComments:是否删除注释。默认值为 false。
- noEmit:对代码进行编译,但不生成编译后的文件。默认值为 false。
- noEmitOnError:当有错误的时候不生成编译后的文件。默认值为 false。
- alwaysStrict:用来设置编译后的文件是否使用严格模式。默认值为 false。
- sourceMap:是否生成 sourceMap。默认值为 false。
- strict:TypeScript 严格检查的总开关。默认值为 false。
- noImplicitAny:不允许隐式的 any 类型。默认值为 false。
- noImplicitThis:不允许不明确类型的 this。默认值为 false。
- strictNullChecks:严格地检查空值。默认值为 false。
- target:用来指定 TS 被编译为的 JS 的版本。