头图

今天我们要深入了解 TypeScript 中最核心的配置文件——tsconfig.json。如果你已经开始写 TypeScript 代码,那么你可能已经接触过这个文件。它是 TypeScript 项目中必不可少的一部分,负责控制 TypeScript 编译器的行为。

但如果你对它还不太熟悉,或者只是简单地将它当作一个自动生成的文件丢在项目里,那本文就能帮你更好地理解它。我们将一步步解析 tsconfig.json 的配置项,帮助你充分掌控 TypeScript 项目的构建过程。

4.1 什么是 tsconfig.json?

tsconfig.json 是 TypeScript 项目的配置文件,定义了 TypeScript 编译器如何处理项目中的代码。它位于项目根目录,并通过 JSON 格式配置各项选项。

你可以把 tsconfig.json 想象成 TypeScript 编译器的“控制中心”,它告诉编译器哪些文件需要编译,如何进行编译,以及编译后输出的文件应当放在哪里。

4.2 创建 tsconfig.json 文件

如果你创建一个新的 TypeScript 项目,通常会使用 tsc --init 命令来生成 tsconfig.json 文件:

tsc --init

运行该命令后,TypeScript 会在项目根目录下自动生成一个基本的 tsconfig.json 文件,文件内容如下:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "include": [
    "src/**/*"
  ]
}

这个文件包含了一些 TypeScript 编译器的默认设置,接下来我们会详细解释每一项的作用。

4.3 tsconfig.json 文件结构

tsconfig.json 文件主要由三个部分组成:

  1. compilerOptions:配置 TypeScript 编译器的选项,控制如何编译代码。
  2. include:指定哪些文件应该包含在编译中。
  3. exclude:指定哪些文件应该从编译中排除。
  4. files:显式列出需要编译的文件。

我们会逐一分析这些部分的常见配置项,帮助你根据需求进行定制化配置。

4.4 compilerOptions 详解

compilerOptionstsconfig.json 中最重要的部分,里面的配置决定了 TypeScript 编译器如何编译你的代码。以下是一些常用的配置项:

4.4.1 target

target 配置项指定编译后的 JavaScript 代码应使用哪个版本的 ECMAScript 标准。它决定了 TypeScript 会将代码转换成哪个版本的 JavaScript。常见的选项有:

  • "es3":编译为 ECMAScript 3(最早的 JavaScript 标准,几乎所有浏览器都支持)。
  • "es5":编译为 ECMAScript 5(现在支持的最广泛的标准)。
  • "es6" / "es2015":编译为 ECMAScript 2015(ES6),支持更现代的语法,如 classletconst 等。
  • "esnext":编译为最新的 ECMAScript 标准,支持最前沿的语言特性。

例如,如果你想将 TypeScript 编译为 ECMAScript 6,可以这么写:

"target": "es6"

4.4.2 module

module 配置项指定了 TypeScript 编译器如何处理模块化代码。TypeScript 支持几种模块化系统,最常用的有:

  • "commonjs":适用于 Node.js 环境。
  • "es6":使用 ECMAScript 6 的模块化语法。
  • "amd":适用于浏览器中的模块加载。
  • "system":适用于 SystemJS 模块加载。

例如,如果你在一个 Node.js 项目中使用 TypeScript,可以将 module 设置为 "commonjs"

"module": "commonjs"

4.4.3 strict

strict 配置项开启了一系列严格的类型检查选项。它是一种方便的快捷方式,可以确保 TypeScript 在编译过程中严格检查类型安全。如果你希望 TypeScript 提供尽可能严格的类型检查,可以开启此选项:

"strict": true

启用 strict 后,TypeScript 会默认开启以下几个重要的检查项:

  • noImplicitAny:防止隐式 any 类型。
  • strictNullChecks:确保严格区分 nullundefined
  • strictFunctionTypes:确保函数类型的严格匹配。

4.4.4 esModuleInterop

esModuleInterop 选项使得 TypeScript 支持在编译时导入 CommonJS 模块,模拟 ECMAScript 模块的行为。这对于一些老的库和模块非常有用。启用它后,你可以像导入 ES6 模块一样导入 CommonJS 模块:

"esModuleInterop": true

4.4.5 skipLibCheck

skipLibCheck 配置项用于跳过库文件的类型检查。默认情况下,TypeScript 会检查所有依赖项的类型声明文件(*.d.ts),但是如果你的项目依赖了很多外部库,开启此选项可以提高编译速度:

"skipLibCheck": true

4.4.6 forceConsistentCasingInFileNames

这个选项确保文件名的大小写一致,避免在不同的操作系统上出现不同的行为。如果你的项目中有跨平台开发,建议开启这个选项:

"forceConsistentCasingInFileNames": true

4.5 include、exclude 和 files

除了 compilerOptionstsconfig.json 还允许你指定编译的文件范围。这些配置项决定了哪些文件会被 TypeScript 编译,哪些文件会被排除。

4.5.1 include

include 用于指定哪些文件或目录需要被包含到编译中。通常,你会将源代码目录(如 src)列在这里:

"include": [
  "src/**/*"
]

这表示编译器会将 src 目录下的所有文件(包括子目录中的文件)都包含在编译中。

4.5.2 exclude

exclude 用于排除不需要编译的文件或目录。例如,你可能不想编译测试文件或者构建产物文件夹(如 node_modules):

"exclude": [
  "node_modules",
  "dist"
]

这表示编译器会忽略 node_modulesdist 目录。

4.5.3 files

files 是一个显式列出需要编译的文件列表。通常,我们使用 includeexclude 来管理文件范围,但如果你需要精确控制编译哪些文件,可以使用 files

"files": [
  "src/index.ts",
  "src/app.ts"
]

4.6 小结:灵活配置 TypeScript 编译器

今天我们深入探讨了 tsconfig.json 文件的配置,了解了它如何控制 TypeScript 编译器的行为。你可以根据项目的需要,灵活调整 compilerOptionsincludeexclude 等配置项,以确保 TypeScript 编译器按照你希望的方式运行。

理解 tsconfig.json 的配置项能帮助你更好地控制 TypeScript 项目的构建流程,避免一些常见的问题,并提升开发效率。

后面我们将介绍 TypeScript 中的模块化开发,讲解如何在项目中正确地组织代码和使用模块。


轻口味
25.2k 声望4.2k 粉丝

移动端十年老人,主要做IM、音视频、AI方向,目前在做鸿蒙化适配,欢迎这些方向的同学交流:wodekouwei