| 严格性 |
|---|
| 总开关:一次性启用 strictNullChecks、noImplicitAny 等多个选项。 |
| 对无法推断类型的参数和变量报错(否则会成为 any)。 |
| null 和 undefined 不再可赋值给所有类型;需要显式声明。 |
| 以逆变方式检查函数参数;捕获不可靠的回调参数类型。 |
| 按函数声明的参数对 bind、call 和 apply 进行类型检查。 |
| 当类属性没有初始值且未在构造函数中赋值时报错。 |
| 可选属性 { p?: T } 不再接受显式赋值 undefined。 |
| 要求遮蔽基类成员的成员必须带 override 关键字。 |
| 对声明后从未读取的局部变量报错。 |
| 对声明后从未读取的函数参数报错。 |
| 对没有任何作用的表达式语句报错。 |
| 禁止对 index signature 的键使用点访问;请用方括号(obj["key"])。 |
| 当一条代码路径返回值而另一条不返回时报错。 |
| 当 switch 的 case 未加 break 就落入下一个 case 时报错。 |
| 语言与模块 |
|---|
| JavaScript 的生成级别(如 ES2022);更新的 target 需要更少的降级转换。 |
| 可用的内置 API(如 ES2022、DOM、DOM.Iterable)。 |
| 生成的模块系统(如 ESNext、CommonJS、NodeNext)。 |
| 采用 Node 的真实规则:每个文件根据最近的 package.json 选择 CJS 或 ESM,相对导入需要文件扩展名。 |
| import 路径的解析方式(如 bundler、node、nodenext)。 |
| 文件何时算作模块:auto(按 import/export 的有无)、legacy 或 force(始终)。 |
| 允许从 CommonJS 模块使用 default 导入风格(多数配置下默认为 true)。 |
| 允许从仅导出命名值的模块使用 default 导入(仅类型层面)。 |
| import 完全按书写原样输出;仅类型导入必须使用 import type(TS 5)。 |
| 让 import 将 .json 文件作为带类型的值加载。 |
| 将 .js 文件纳入编译输入。 |
| 也对 .js 文件做类型检查(读取其 JSDoc 注释);隐含 allowJs。 |
| .tsx 的编译方式:react-jsx(自动运行时)、react(React.createElement)或 preserve。 |
| 将自动包含的 @types 包限制为该列表;空数组表示一个都不包含。 |
| 扫描 @types 包的目录,取代向上遍历所有 node_modules/@types。 |
| 确保每个文件都能单独转译(bundler 和 esbuild 的要求)。 |
| 编译输出 |
|---|
| 编译后的 JavaScript 的输出位置。 |
| 源文件的根目录;保持输出目录树形状稳定。 |
| 生成 .js.map 文件,让调试器映射回 TypeScript。 |
| 将 source map 以注释形式内嵌到 .js 文件中,而不是单独的 .js.map 文件。 |
| 生成 .d.ts 类型声明(库必需)。 |
| 生成 .d.ts.map 文件,让编辑器从声明跳回 TypeScript 源码。 |
| 只生成 .d.ts 文件;JavaScript 交给 bundler(需要 declaration 或 composite)。 |
| 复用 tslib 中的 __rest 等辅助函数,而不是生成到每个文件里。 |
| 当 target 早于 ES2015 时,正确编译可迭代对象上的 for..of、spread 和解构。 |
| 从生成的 JavaScript 中去除注释。 |
| 仅做类型检查;不写任何文件(由 bundler 负责产物时使用)。 |
| 路径 |
|---|
| 非相对模块解析的基础目录。 |
| 将 import 前缀映射到位置,如 { "@/*": ["src/*"] }。 |
| 将多个目录视为单一虚拟根进行解析。 |
| 项目结构 |
|---|
| 将项目标记为可供 project references 构建(启用 declaration、incremental)。 |
| 依赖其他 tsconfig 项目,实现更快、彼此隔离的构建。 |
| 保存构建信息,下次运行时跳过未变更文件的重新检查。 |
| 其他检查 |
|---|
| 为提速跳过对 .d.ts 文件的类型检查(默认 true)。 |
| 对与文件实际大小写不一致的 import 报错。 |
| 数组与索引访问返回 T | undefined,而不是 T。 |
| 类字段用 Object.defineProperty 创建而非普通赋值(ES2022+ 目标下默认 true)。 |
| 启用旧框架所用的传统装饰器语法(标准化之前)。 |
| 错误信息中报告完整类型名,而不是截断长名称。 |
| 当裸的副作用导入(import "./x.css")解析不到任何内容时报错。 |
| 允许以 .ts 结尾的 import 路径(需要 noEmit 或 emitDeclarationOnly)。 |