概览

当目录中出现了 tsconfig.json 文件,则说明该目录是 TypeScript 项目的根目录。tsconfig.json 文件指定了编译项目所需的根目录下的文件以及编译选项。

JavaScript 项目可以使用 jsconfig.json 文件,它的作用与 tsconfig.json 基本相同,只是默认启用了一些 JavaScript 相关的编译选项。

一个项目将以下列之一的方式使用 tsconfig.json 或者 jsconfig.json 进行编译:

  • 在调用 tsc 命令并且没有其它输入文件参数时,编译器将由当前目录开始向父级目录寻找包含 tsconfig 文件的目录。

  • 调用 tsc 命令并且没有其他输入文件参数,可以使用 --project (或者只是 -p)的命令行选项来指定包含了 tsconfig.json 的目录,或者包含有效配置的 .json 文件路径。

当在命令行上指定输入文件时,tsconfig.json 文件将被忽略。

一个 tsconfig.json 的示例如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
{
"compilerOptions": {
"module": "system",
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": true,
"outFile": "../../built/local/tsc.js",
"sourceMap": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "**/*.spec.ts"]
}

基本的 tsconfig

根据你要在其中运行代码的不同的 JavaScript 运行时环境,你可以在 github.com/tsconfig/bases 上寻找一个合适的基本配置。 你可以通过扩展(extends)这些已经处理过不同的 JavaScript 运行时环境的 tsconfig.json 文件来简化你项目中的 tsconfig.json

可选的基本 tsconfig 如下所示:

名称 说明
Recommended @tsconfig/recommended
Bun @tsconfig/bun
Create React App @tsconfig/create-react-app
Cypress @tsconfig/cypress
Deno @tsconfig/deno
Docusaurus v2 @tsconfig/docusaurus
Ember @tsconfig/ember
Next.js @tsconfig/next
Node LTS @tsconfig/node-lts
Node 10 @tsconfig/node10 Node也有 12 14 16 17 18 19 20 版本,写法类似
Nuxt @tsconfig/nuxt
React Native @tsconfig/react-native
Remix @tsconfig/remix
Strictest @tsconfig/strictest
Svelte @tsconfig/svelte
Taro @tsconfig/taro
Vite React @tsconfig/vite-react

tsconfig 配置参考

详细参考见 https://www.typescriptlang.org/tsconfig

compilerOptions

compilerOptions 构成了 TypeScript 配置的大部分内容,它涵盖了语言应该如何工作。

大致包括以下部分:

  1. 类型检查 Type Checking
  2. 模块 Modules
  3. 发布 Emit
  4. JavaScript 支持 JavaScript Support
  5. 编辑器支持 Editor Support
  6. 交互限制 Interop Constraints
  7. 向后兼容性 Backwards Compatibility
  8. 语言与环境 Language and Environment
  9. 编译器诊断 Compiler Diagnostics
  10. 项目 Projects
  11. 输出格式化 Output Formatting
  12. 完整性 Completeness
  13. 命令行 Command Line
  14. 监视选项 Watch Options

详见 编译选项

files

类型:array<string>
默认值: false
指定要包含在程序中的文件的允许列表。如果找不到任何文件,就会发生错误。
当只有少量文件并且不需要使用 glob 模式来引用多个文件时,可以使用 files。其他情况使用 include

extends

类型: string
默认值: false
指定包含要从中继承的另一个配置文件的路径。路径可能使用 Node.js 样式的解析。
首先加载基本文件中的配置,然后由继承配置文件中的那些配置覆盖。在配置文件中找到的所有相对路径都将相对于它们源自的配置文件进行解析。配置之间不允许循环继承。references 无法被继承。

include

类型:array
默认值:如果有 file 则默认为 [] 否则默认为 **/*
指定要包含在程序中的文件名或模式的数组。这些文件名是相对于包含 tsconfig.json 文件的目录解析的。

includeexclude 支持通配符以生成 glob 模式:

  • * 匹配零个或多个字符(不包括目录分隔符)
  • ? 匹配任何一个字符(不包括目录分隔符)
  • **/ 匹配嵌套到任何级别的任何目录

如果模式中的最后一个路径段不包含文件扩展名或通配符,则将其视为一个目录,并包括该目录中具有支持扩展名的文件(例如,默认情况下为 .ts 、.tsx 和 .d.ts ,如果 allowJs 设置为 true ,则使用 .js 和 .jsx )。

exclude

类型:array
默认值:['node_modules', 'bower_components', 'jspm_packages', '%outDir%']
指定在解析include时应跳过的文件名或模式的数组。

重要提示exclude 仅排除由于 include 设置而包含的文件。exclude 指定的文件仍然可以成为代码库的一部分,这是由于代码中的 import 语句、types 包含、///<reference 指令或在 files 列表中指定。

references

项目引用是一种将 TypeScript 程序解构成更小部分的方法。使用项目引用可以极大地缩短构建和编辑器交互时间,强制组件之间的逻辑分离,并以新的和改进的方式组织代码。详见 Project References

编译选项 compilerOptions

类型检查 Type Checking

allowUnreachableCode

允许无法访问的代码

  • undefined(默认)将建议作为警告提供给编辑器

  • true 忽略无法访问的代码

  • false 引发关于无法访问代码的编译器错误

allowUnusedLabels

允许未使用的标签(label)

  • undefined(默认)将建议作为警告提供给编辑器

  • true 忽略未使用的标签

  • false 引发关于未使用标签的编译器错误

alwaysStrict

确保在 ECMAScript 严格模式下解析文件,并为每个源文件添加 use strict

默认值:如果有 strict 则默认为 true 否则为 false

exactOptionalPropertyTypes

启用 exactOptionalPropertyTypes 后,TypeScript 对具有 ? 前缀的类型或接口的属性启用更加精确的规则。

noFallthroughCasesInSwitch

在 switch 语句中进入穿透分支时报告错误。确保 switch 语句中的任何非空分支都包括 break、return 或 throw 。这意味着你不会意外地遇到穿透分支的bug。

noImplicitAny

在某些不存在类型注释的情况下,当 TypeScript 无法推断变量的类型时,它将回退到 any 类型。

默认值:如果有 strict 则默认为 true 否则为 false

noImplicitOverride

当处理使用继承的类时,子类可能会与在基类中重命名时重载的函数“不同步”(隐式重载)。
使用 noImplicitOverride 可以确保重载的函数必需包含关键字 override ,从而确保子类永远不会失去同步。

noImplicitReturns

启用后,TypeScript 将检查函数中的所有代码路径,以确保它们返回值。

noImplicitThis

在具有隐含 “any” 类型的 “this” 表达式上引发错误。

noPropertyAccessFromIndexSignature

此设置可确保通过点(obj.key)语法和索引(obj["key"])访问字段以及在类型中声明属性的方式之间的一致性。如果没有此标志,TypeScript 将允许你使用点语法访问未定义的字段。

noUncheckedIndexedAccess

TypeScript 有一种方法可以通过索引签名来描述对象上具有未知键但已知值的对象。
启用 noUncheckedIndexedAccess 将向类型中任何未声明的字段添加 undefined 类型。

noUnusedLocals

对未使用的局部变量报告错误。

noUnusedParameters

对函数中未使用的参数报告错误。

strict

严格标志可以实现广泛的类型检查行为,从而为程序的正确性提供更强的保证。启用此选项相当于启用以下列出的所有严格模式族选项(以 strict 开头的选项)。然后,你可以根据需要关闭单独的严格模式族检查。

strictBindCallApply

设置后,TypeScript 将检查函数 call、bind 和 apply 的内置方法是否使用基础函数的正确参数调用。

strictFunctionTypes

启用时,此标志会使函数参数得到更正确的检查。

strictNullChecks

当 strictNullChecks 为 false 时,语言会有效地忽略 null 和 undefined 。这可能会导致运行时出现意外错误。
当 strictNullChecks 为 true 时, null 和 undefined 有各自不同的类型,如果你试图在需要具体值的地方使用它们,则会出现类型错误。

strictPropertyInitialization

当设置为 true 时,当类属性已声明但未在构造函数中设置时,TypeScript 将引发错误。

useUnknownInCatchVariables

在 TypeScript 4.0 中添加了新的功能,允许将 catch 子句中变量的类型从 any 更改为 unknown 。
这种模式确保错误处理代码变得更加全面,因为你不能提前保证抛出的对象是 error 子类。
启用了 useUnknownCatchVariables 标志后,就不需要额外的语法(:unknown)或 linter 规则来强制执行此行为。

Modules 模块

allowArbitraryExtensions

在 TypeScript 5.0 中,当导入路径的扩展名不是已知的 JavaScript 或 TypeScript 文件扩展名时,编译器将为该路径查找一个形式为 {file-basename}.d.{extension}.ts 的声明文件。
默认情况下,此导入会引发一个错误,让你知道 TypeScript 不理解此文件类型,并且你的运行时可能不支持导入它。但是,如果你已将运行时或打包器配置为可以处理它,则可以使用新的 --allowArbitraryExtensions 编译器选项来抑制该错误。

allowImportingTsExtensions

--allowImportingTsExtensions 允许 TypeScript 文件使用 TypeScript 特定的扩展名(如 .ts、.mts 或 .tsx)相互导入。
只有启用 --noEmit--emitDeclarationOnly 时才允许使用此标志,因为这些导入路径在运行时无法在 JavaScript 输出文件中解析。这里的期望是,你的解析器(例如,你的打包器、运行时或其他工具)将会做这些在 .ts 文件之间的导入工作。

allowUmdGlobalAccess

当设置为 true 时, allowUmdGlobalAccess 允许你从模块文件内部访问作为全局变量的 UMD 导出。模块文件是具有导入和/或导出功能的文件。如果没有此标志,使用 UMD 模块的导出需要导入声明。

baseUrl

设置要从中解析非相对模块名称的基本目录。
使用 "baseUrl":"./" 时,TypeScript 将查找与 tsconfig.json 位于同一文件夹的文件。

customConditions

--customConditions 获取 TypeScript 从 package.json 的导出或导入字段解析时应成功的附加条件列表。这些条件将添加到解析程序默认使用的任何现有条件中。
该字段仅在 --moduleSolutionnode16nodenextbundler 时有效。

module

设置应用程序的模块系统。改变 module 会影响 moduleResolution

默认值:如果 targetES3 或者 ES5 那么 module 默认为 CommonJS,否则默认为 ES6/ES2015

以下为该文件的一些例子输出:

index.ts
1
2
3
import { valueOfPi } from "./constants";

export const twoPi = valueOfPi * 2;
CommonJS
1
2
3
4
5
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.twoPi = void 0;
const constants_1 = require("./constants");
exports.twoPi = constants_1.valueOfPi * 2;
UMD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "./constants"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.twoPi = void 0;
const constants_1 = require("./constants");
exports.twoPi = constants_1.valueOfPi * 2;
});
AMD
1
2
3
4
5
6
define(["require", "exports", "./constants"], function (require, exports, constants_1) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.twoPi = void 0;
exports.twoPi = constants_1.valueOfPi * 2;
});
System
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
System.register(["./constants"], function (exports_1, context_1) {
"use strict";
var constants_1, twoPi;
var __moduleName = context_1 && context_1.id;
return {
setters: [
function (constants_1_1) {
constants_1 = constants_1_1;
}
],
execute: function () {
exports_1("twoPi", twoPi = constants_1.valueOfPi * 2);
}
};
});
ESNext
1
2
import { valueOfPi } from "./constants";
export const twoPi = valueOfPi * 2;
ES2015/ES6/ES2020/ES2022
1
2
import { valueOfPi } from "./constants";
export const twoPi = valueOfPi * 2;

除了 ES2015/ES6 的基本功能外,ES2020 还增加了对动态导入和 import.meta 的支持,而 ES2022 则进一步增加了对 top await 的支持。

None
1
2
3
4
5
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.twoPi = void 0;
const constants_1 = require("./constants");
exports.twoPi = constants_1.valueOfPi * 2;

moduleResolution

指定模块解析策略:

  • node16 或者 nodenext 表示使用 Node.js 的现代版本。Node.js v12及更高版本同时支持 ECMAScript import 和 CommonJS require
  • node10(以前称为 node )适用于 v10 以内的 Node.js 版本,仅支持 CommonJS require。
  • 用于打包器的 bundler。与 node16 和 nodenext 一样,该模式支持 package.json 的 “imports” 和 “exports” ,但与 Node.js 解析模式不同,bundler 在导入中不需要相对路径上的文件扩展名。
  • 在 1.6 版本之前,TypeScript 中使用了 classic

默认值:如果 moduleAMD,UMD,System 或者 ES6/ES2015 则默认值是 Calssic;如果 modulenode16 或者 nodenext,则与之相匹配; 否则默认值为 Node

moduleSuffixes

类型:array<string>
提供一种在解析模块时覆盖要搜索的文件名后缀的默认列表的方法。

noResolve

默认情况下,TypeScript 将检查 import 和 reference 指令的初始文件集,并将这些解析的文件添加到程序中。
如果设置了 noResolve ,则不会发生此过程。但是,import 语句仍然会被检查,以查看它们是否解析为有效的模块,因此你需要确保通过其他方式满足这一要求。

paths

将 paths 中所列出的一系列条目的 import 重新映射,如果设置了 baseUrl,则相对于 baseUrl 进行查找,否则相对于 tsconfig 文件本身的位置进行查找。通过设置 paths,TypeScript 文件解析器可以支持自定义前缀来查找代码引入路径。

resolveJsonModule

允许导入带有 .json 扩展名的模块,这是 node 项目中的常见做法。这包括基于静态 JSON 形状为 import 生成一个类型。

resolvePackageJsonExports

--resolvePackageJsonExports 强制 TypeScript 在读取 node_modules 中的包时,查阅 package.json 文件的 exports 字段。

默认值:当 moduleResolutionnode16 , nodenext 或者 bundler 时,默认值为 true, 否则为 false

resolvePackageJsonImports

--resolvePackageJsonImports 强制 TypeScript 在从祖先目录包含 package.json 的文件执行以 # 开头的查找时,查阅 package.json 文件的 imports 字段。

默认值:当 moduleResolutionnode16 , nodenext 或者 bundler 时,默认值为 true, 否则为 false

rootDir

根节点。

默认值:所有非声明输入文件的最长公共路径。如果设置了 composite,则默认为包含 tsconfig.json 文件的目录。

rootDirs

使用 rootDirs ,你可以通知编译器有许多“虚拟”目录充当单个根目录。这允许编译器解析这些“虚拟”目录中的相对模块导入,就好像它们被合并到一个目录中一样。

typeRoots

默认情况下,所有可见的 @types 包都包含在编译中。如果指定了 typeRoots ,则只包括 typeRoots 下的包。所有路径都是相对于 tsconfig.json 的。

types

默认情况下,所有可见的 @types 包都包含在编译中。如果指定了 types,则只有列出的包才会包含在全局作用域中。

Emit 生成

declaration

为项目中的每个 TypeScript 或 JavaScript 文件生成 .d.ts 文件。这些 .d.ts 文件是描述模块的外部API的类型定义文件。有了 .d.ts 文件,像 TypeScript 这样的工具可以为正在键入的代码提供智能提示和准确的类型。

默认值:如果 composite 则默认值为 true ,否则为 false

declarationDir

提供了一种配置根目录的方法,该根目录用于生成类型描述文件( .d.ts )。

declarationMap

为映射回原始 .ts 源文件的 .d.ts 文件生成源映射。这将允许 VS Code 等编辑器在使用 go to Definition 等功能时转到原始 .ts 文件。

downlevelIteration

如果存在 Symbol.iterator 的实现,那么 downlevelIteration 允许在 ES5 环境中更准确地使用这些迭代方法的原始语法。

emitBOM

控制 TypeScript 在写入输出文件时是否会生成字节顺序标记(BOM)。一些运行时环境需要 BOM 来正确解释 JavaScript 文件;其他人则要求它不存在。默认值 false 通常是最好的,除非你有理由更改它。

emitDeclarationOnly

仅生成 .d.ts 文件;不生成 .js 文件。

importHelpers

对于某些降级操作,TypeScript 使用一些辅助代码来执行诸如继承类、扩展数组或对象以及异步操作等。默认情况下,这些辅助代码会插入到使用它们的文件中。如果在许多不同的模块中使用相同的辅助代码,这可能会导致代码重复。如果 importHelpers 标志处于启用状态,则这些辅助函数将改为从 tslib 模块导入。你需要确保 tslib 模块能够在运行时导入。这只会影响模块;全局脚本文件将不会尝试导入模块。

importsNotUsedAsValues

此标志控制 import 的工作方式,有三个不同的选项:

  • remove:删除仅引用类型的 import 语句。
  • preserve:保留其值或类型从未使用过的所有 import 语句。这可能会导致保留 引入/副作用。
  • error:这将保留所有 import(与 preserve 选项相同),但当 import 仅用作类型时会出错。如果你希望确保没有意外导入值,但仍然显式导入副作用,那么这可能会很有用。

这个标志之所以有效,是因为你可以使用 import type 显式地创建一个 import 语句,而该语句永远不应该被生成到 JavaScript 中。

inlineSourceMap

设置后,TypeScript 将把源映射内容嵌入 .js 文件中,而不是生成 .js.map 文件来提供源映射。

inlineSources

设置后,TypeScript 将把 .ts 文件的原始内容作为嵌入字符串包含在源映射中(使用源映射的 sourcesContent 属性)。

mapRoot

指定调试器应该定位映射文件的位置,而不是生成的位置。

newLine

指定在生成文件时使用的行尾序列:’ CRLF ‘ (dos)或’ LF ‘ (unix)。

noEmit

不要生成编译器输出文件,如 JavaScript 源代码、源映射或声明。
这为 Babel 或 swc 等其他工具腾出了空间来处理将 TypeScript 文件转换为可以在 JavaScript 环境中运行的文件。

noEmitHelpers

你可以在全局作用域中为你使用的帮助程序提供一种实现,而不是使用 importthelpers 导入帮助程序,并完全关闭生成或帮助函数。

noEmitOnError

如果报告了任何错误,不要生成编译器输出文件,如 JavaScript 源代码、源映射或声明。

默认值:false

outDir

如果指定,.js (以及 .d.ts .js.Map 等)文件将被生成到该目录。

outFile

如果指定,所有全局(非模块)文件将被连接到指定的单个输出文件中。

preserveConstEnums

不要在生成的代码中删除 const enum 声明。const enum 提供了一种在运行时通过生成枚举值而不是引用来减少应用程序总体内存占用的方法。

preserveValueImports

preserveValueImports 会阻止 TypeScript 移除 import,即使它看起来没有被使用。

removeComments

当转换为 JavaScript 时,从 TypeScript 文件中删除所有注释。

默认值:false

sourceMap

允许生成源映射文件。

sourceRoot

指定调试器应该定位 TypeScript 文件的位置,而不是相对源位置。

stripInternal

不要为 JSDoc 注释中有 @internal 注释的代码生成声明文件。

Javascript 支持

allowJs

允许在项目中导入 JavaScript 文件,而不仅仅是 .ts.tsx 文件。

checkJs

allowJs 协同工作。当 checkJs 被启用时,会在 JavaScript 文件中报告错误。这相当于在项目中包含的所有 JavaScript 文件的顶部包含 // @ts-check

maxNodeModuleJsDepth

在 node_modules 下搜索和加载 JavaScript 文件的最大依赖深度。仅 allowJs 开启时有效。

编辑器支持

disableSizeLimit

为了避免在处理非常大的 JavaScript 项目时可能出现的内存膨胀问题,TypeScript 会分配一个内存上限。打开此标志将取消限制。

plugins

要在编辑器中运行的语言服务插件列表。

交互限制

allowSyntheticDefaultImports

当设置为true时,allowsyntheticdefaulultimports允许你编写这样的导入:

1
import React from "react";

而不是:

1
import * as React from "react";

当模块未显式指定默认导出时。

esModuleInterop

默认情况下(esModuleInterop 为 false 或未设置)d,TypeScript 对待 CommonJS/AMD/UMD 模块的方式与对待 ES6 模块类似。在此过程中,有两个部分被证明是有缺陷的:

  • import * as moment from "moment" 这样的命名空间导入与 const moment = require("moment") 的作用相同

  • import moment from "moment" 这样的默认导入与 const moment = require("moment").default 的作用相同

这种不匹配导致了以下两个问题:

ES6 模块规范规定,命名空间 import (import * as x) 只能是一个对象,通过让 TypeScript 像对待= require("x") 一样对待它,那么 TypeScript 就允许将导入作为一个函数来对待,并且可以被调用。根据 Javascript 说明书,这是无效的。

虽然符合 ES6 模块规范,但大多数带有 CommonJS/AMD/UMD 模块的库并不像 TypeScript 的实现那样严格遵守规范。

打开 esModuleInterop 会在 TypeScript 编译的代码中修复这两个问题。第一个改变了编译器中的行为,第二个通过两个新的帮助函数修复,这两个帮助函数提供了一个机制,以确保所生成的 JavaScript 可以兼容。

forceConsistentCasingInFileNames

当设置了这个选项后,如果一个程序试图用不同于磁盘上的大小写来引入一个文件,TypeScript 会提示一个错误。

isolatedModules

设置 isolatedModules 标志告诉 TypeScript,如果你写的某些代码不能被单文件编译过程正确解释,它会警告你。

该配置与 Node.js 中相同的标志含义相同;不解析符号链接的实际路径。

verbatimModuleSyntax

任何没有 type 修饰符的导入或导出都将保留。任何使用 type 修饰符的内容都将被完全删除。

向后兼容性

以下为废弃的或向后兼容配置:

charset keyofStringsOnly noImplicitUseStrict noStrictGenericChecks out suppressExcessPropertyErrors suppressImplicitAnyIndexErrors reactNamespace skipDefaultLibCheck

语言与环境

emitDecoratorMetadata

与模块 reflect-metadata 共同使用,启用对装饰器(decorator)生成类型元数据(metadata)的实现性支持。

experimentalDecorators

启用对 decorator 的实验性支持。

jsx

控制文件中 JSX 结构如何生成 JavaScript。只影响 .tsx 文件。

可选项 含义
react 带 JSX 的 js 文件会被转换成等效的 React.createElement 调用
react-jsx 带 JSX 的 js 文件会被转换成 _jsx 调用
react-jsxdev 带 JSX 的 js 文件会被转换成 _jsx 调用
preserve 带 JSX 的 js 文件中的 JSX 不会被转换
react-native 带 JSX 的 js 文件中的 JSX 不会被转换

jsxFactory

使用 JSX 运行时编译 JSX 元素时,更改 .js 文件中调用的函数。最常见的更改是使用 hpreact.h,而不是默认的 React.createElement(如果使用 preact)。

jsxFragmentFactory

指定在带有 jsxFactory 编译器选项的目标 react JSX 生成时要使用的 JSX fragment 工厂函数,例如 Fragment

jsxImportSource

jsx 属性为为 “react jsx” 或 “react jsonxdev” 时,声明用于导入 jsxjsxs 工厂函数的模块说明符。

默认值: react

lib

用于使 TypeScript 包括与你指定的目标匹配的 JS 新功能的 API 的类型声明。

moduleDetection

此设置控制 TypeScript 如何确定文件是脚本还是模块。

可选项 含义
auto 默认值,TypeScript 不仅会查找导入和导出语句,而且当使用 module:nodenextnode16 运行时,它还会检查 package.json 中的 “type” 字段是否设置为 “module”,当 jsx 配置项为 react-jsx 时,还会检查当前文件是否为 JSX 文件。
legacy 使用导入和导出语句来确定文件是否为模块。
force 确保每个非声明文件都被视为一个模块。

noLib

禁用自动包含任何库文件。如果设置了此选项,则会忽略 lib 配置项。

target

target 配置项决定了哪些 JS 特性降级了,哪些保持不变。

useDefineForClassFields

这个标志被用作迁移到即将到来的 class 字段标准版本的一部分。

默认值:如果 targetES2022 或者更高版本(包括 ESNext) 则为 true,否则为 false

编译诊断

diagnostics

输出诊断信息,用于调试。

explainFiles

打印 TypeScript 认为是你项目一部分的文件名,以及它们成为编译一部分的原因。

extendedDiagnostics

你可以使用这个标志来发现 TypeScript 在编译时把时间花在了哪里。这是一个用于全面了解代码库性能特征的工具。

generateCpuProfile

这个选项让你有机会让 TypeScript 在编译器运行期间输出 v8 CPU 配置文件。CPU 配置文件可以深入了解构建可能缓慢的原因。

默认值: profile.cpuprofile

listEmittedFiles

将编译过程中生成的文件的名称打印到终端。

listFiles

打印编译过程中文件的名称。

traceResolution

让 TypeScript 为每个处理过的文件打印有关它的解析过程的信息。

项目

composite

composite 选项强制了某些约束,使得构建工具(包括 TypeScript 本身,在 -—build 模式下)能够快速确定项目是否已经构建完成。

disableReferencedProjectLoad

如果你的项目很大,你可以使用 disableReferencedProjectLoad 标志来禁用所有项目的自动加载。相反,当你通过编辑器打开文件时,会动态加载项目。

disableSolutionSearching

当使用复合 TypeScript 项目时,该选项提供了一种方式来声明,当使用诸如 查找所有引用 或在编辑器中 跳转到定义 之类的特性时,你不希望包含某个项目。

disableSourceOfProjectReferenceRedirect

当使用复合 TypeScript 项目时,该选项提供了一种回到 Typescript 3.7 之前的行为的方法,在 Typescript 3.7 之前,d.ts 文件被用作模块之间的边界。

incremental

告诉 TypeScript 将上次编译时的项目图信息保存到存储在磁盘上的文件 .tsbuildinfo 中。

默认值:如果 composite 配置项为 true 则为 true,否则为 false

tsBuildInfoFile

这个设置允许你指定一个文件来存储增量编译信息,作为复合项目的一部分,这样可以更快地构建更大的 TypeScript 代码库。

默认值:.tsbuildinfo

输出格式化

noErrorTruncation

不要截断错误消息。

preserveWatchOutput

是否将过时的控制台输出保持在监视模式,而不是每次发生更改时清除屏幕。

pretty

使用颜色和上下文对错误和消息进行风格化,默认开启。

完整性

skipLibCheck

跳过声明文件的类型检查。

监视选项

assumeChangesOnlyAffectDirectDependencies

当启用这个选项时,TypeScript 将避免重新检查/重建所有真正可能受到影响的文件,只重新检查/重建那些已经改变的文件,以及那些直接导入它们的文件。