前言
TypeScript
带来的类型系统以及强大的IDE
支持,让前端开发也变得严谨而流畅。但TypeScript
不是原生的Javascript
代码,需要进行编译才能转换为Javascript
代码。
tsconfig.json
是编译TypeScript
的配置文件,对书写TypeScript
代码十分重要。接下来会介绍一些常用的编译选项和所有tsconfig.json
选项的解释。
常用属性
1.experimentalDecorators
是否启用实验性的ES装饰器
。 默认值:false, 官方解释
TypeScript 和 ES6 中引入了 Class 的概念,同时在 stage 2 proposal (opens new window)提出了 Java 等服务器端语言早就有的装饰器模式。通过引入装饰器模式,能极大简化书写代码,把一些通用逻辑封装到装饰器中。
2.strictPropertyInitialization
是否类的非undefined属性已经在构造函数里初始化
。 默认值:false
1 | export default class Home { |
3.noImplicitAny
有隐含的 any类型时是否报错
。 默认值:false
ts 是有默认推导的,同时还有 any 类型,所以不是每个变量或参数定义需要明确告知类型是什么。如果开启该值,当有隐含 any 类型时,会报错。
1 | // 当开启noImplicitAny时,需要隐含当any需要明确指出 |
4.target
指定编译的ECMAScript目标版本
。默认值: “ES3”官方解释
枚举值:”ES3”, “ES5”, “ES6”/ “ES2015”, “ES2016”, “ES2017”,”ES2018”,”ES2019”,”ES2020”,”ES2021”,”ES2022”,”ESNext”
target: “ESNext” 是指 tc39 最新的ECMAScript proposals
当编译 ts 代码时,可以把 ts 转为 ES5 或更早的 js 代码。所以需要选择一个编译的目标版本。
5.module
指定生成哪个模块系统代码
官方解释
枚举值:”None”, “CommonJS”, “AMD”, “System”, “UMD”, “ES6”, “ES2015”,”ES2020”, “ES2022”, “ESNext”, “node16”, “nodenext”,
默认值根据–target 选项不同而不同,当 target 设置为 ES6 时,默认 module 为“ES6”,否则为“commonjs”
6.lib
编译过程中需要引入的库文件的列表
string[]类型,可选的值有很多,常用的有 ES5,ES6,ESNext,DOM,DOM.Iterable、WebWorker、ScriptHost 等。
该值默认值是根据–target 选项不同而不同。
当 target 为 ES5 时,默认值为[‘DOM ‘, ‘ES5’, ‘ScriptHost’];
当 target 为 ES6 时,默认值为[‘DOM’, ‘ES6’, ‘DOM.Iterable’, ‘ScriptHost’]
7.moduleResolution
决定如何处理模块
官方解释
说直白点,也就是遇到 import { AAA } from ‘./aaa’该如何去找对应文件模块解析。
1 | // 在源文件/root/src/A.ts中import { b } from "./moduleB" |
8.paths
模块名或路径映射的列表
这是一个非常有用的选项,比如我们经常使用‘@/util/help’来代替’./src/util/help’,省的每次在不同层级文件 import 模块时,都纠结于是’./‘还是’../‘。该选项告诉编译器遇到匹配的值时,去映射的路径下加载模块。
1 | { |
9.strictNullChecks
是否启用严格的 null检查模式
默认值: false 建议开启该选项
未处理的 null 和 undefined 经常会导致 BUG 的产生,所以 TypeScript 包含了 strictNullChecks 选项来帮助我们减少对这种情况的担忧。当启用了 strictNullChecks,null 和 undefined 获得了它们自己各自的类型 null 和 undefined。开启该模式有助于发现并处理可能为 undefined 的赋值。
1 | // 未开启strictNullChecks,number类型包含了null和undefined类型 |
注意:启用 –strict 相当于启用 –noImplicitAny, –noImplicitThis, –alwaysStrict, –strictNullChecks, –strictFunctionTypes 和–strictPropertyInitialization
10.noUnusedLocals
有未使用的变量时,是否抛出错误
默认值: false
当发现变量定义但没有使用时,编译不报错。eslint 的 rule 中也有该条,建议正式项目将该选项开启,设置为 true,使得代码干净整洁
11.noUnusedParameters
有未使用的参数时,是否抛出错误
默认值: false
建议开启,理由同上。
12.allowJs
是否允许编译javascript文件
默认值: false
如果设置为 true,js 后缀的文件也会被 typescript 进行编译。
13.typeRoots 和 types
默认所有可见的”@types”包会在编译过程中被包含进来。如果指定了 typeRoots,只有 typeRoots 下面的包才会被包含进来。如果指定了 types,只有被列出来的 npm 包才会被包含进来。详细解释
可以指定”types”: []来禁用自动引入@types 包#14. files、include 和 exclude
14.files、include 和 exclude
编译文件包含哪些文件以及排除哪些文件
未设置 include 时,编译器默认包含当前目录和子目录下所有的 TypeScript 文件(.ts, .d.ts 和 .tsx)。如果 allowJs 被设置成 true,JS 文件(.js 和.jsx)也被包含进来。exclude 排除那些不需要编译的文件或文件夹。
1 | { |
全解析
1 | { |