跳转到主要内容
模块 7 · 第 1 课(共 2)课程中的13/14~12 min
模块课程(1/2)

使用 tsconfig.json 配置

tsconfig.json 文件指定 TypeScript 项目的根目录以及构建该项目所需的编译器选项。

每当您在项目目录中运行 tsc 时,编译器都会搜索此文件以指导其编译行为。


tsconfig.json 文件的结构

典型的配置文件如下所示:

Code
{
  "compilerOptions": {
    "target": "es2022",
    "module": "commonjs",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "outDir": "./dist"
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "**/*.spec.ts"]
}

主要属性是:

  • compilerOptions:编译器的设置。
  • include:指定要编译的文件或文件夹。
  • exclude:指定编译期间要忽略的文件或文件夹。

主要编译器选项

以下是一些需要了解的最重要的设置:

  1. target:指定编译器输出的 JavaScript 版本(例如 es5、es6/es2015、es2020、esnext)。
  2. module:指定编译代码中使用的模块系统(例如,commonjs、esnext、node16)。
  3. strict:启用一系列严格的类型检查行为。强烈建议将其设置为 true 以获得最大的类型安全性。它启用以下选项:
    • noImplicitAny:当未提供类型注释时,在具有隐含 any 类型的表达式和声明上引发错误。
    • strictNullChecks:防止将 null 或 undefined 分配给未明确将它们包含在其联合中的类型。

自己尝试一下

练习 1:处理 strictNullChecks

锻炼#ts.m7.l1.e1
尝试:0加载中...

在 tsconfig.json 中的 strictNullChecks: true 选项下,我们不能将 null 或 undefined 分配给原始类型。声明一个名为 parseAge 的函数,该函数接受 string | 类型的输入如果输入不为 null 并且是有效整数,则返回 null 并返回一个数字,否则返回 0。显式处理 null 情况以通过严格编译。

正在加载编辑器...
显示提示

在函数开始时检查输入是否为空,并在处理字符串之前立即返回 0。

3 次尝试后可用的解决方案

练习 2:不使用隐式 Any 的严格键入

锻炼#ts.m7.l1.e2
尝试:0加载中...

在 noImplicitAny: true 下,任何无法推断其类型的参数都必须显式键入。创建一个名为 processItems 的函数,该函数接受数组项(数字数组)和一个回调函数,该回调函数接受单个数字作为参数且不返回任何内容。确保不要使用任何内容并明确键入所有内容。

正在加载编辑器...
显示提示

使用签名 function processItems(items: number[], callback: (item: number) => void): void 声明该函数。

3 次尝试后可用的解决方案