TypeScript 配置文件 tsconfig.json 备忘单 { "compilerOptions": { /* 基础配置: */ "esModuleInterop": true, "skipLibCheck": true, "target": "es2022", "allowJs": true, "resolveJsonModule": true, "moduleDetection": "force", "isolatedModules": true, "verbatimModuleSyntax": true, /* 严格模式 */ "strict": true, "noUncheckedIndexedAccess": true, "noImplicitOverride": true, /* 如果使用 TypeScript 进行转译: */ "module": "NodeNext", "outDir": "dist", "sourceMap": true, /* 如果你在为库建造: */ "declaration": true, /* 如果是在 monorepo 仓库中进行lib构建: */ "composite": true, "declarationMap": true, /* 如果不使用 TypeScript 进行转译: */ "module": "preserve", "noEmit": true, /* 如果您的代码在DOM中运行: */ "lib": ["es2022", "dom", "dom.iterable"], /* 如果你的代码无法在 DOM 中运行: */ "lib": ["es2022"] } } 适用于所有项目的基本设置 { "compilerOptions": { /* 帮助修复 CommonJS 和 ES模块之间的一些缺陷 */ "esModuleInterop": true, /* 跳过检查文件类型 .d.ts。这对于性能很重要,否则 node_modules 将检查所有内容 */ "skipLibCheck": true, /* 目标的 JavaScript 版本。为了稳定,建议 es2022 使用以上版本 esnext */ "target": "es2022", /* 允许导入 .js 和 .json 文件 */ "allowJs": true, "resolveJsonModule": true, /* 此选项强制 TypeScript 将所有文件视为模块/。这有助于避免 “无法重新声明块范围变量” 的错误 */ "moduleDetection": "force", /* 此选项可防止一些将模块视为独立文件时不安全的 TS 功能 */ "isolatedModules": true, /* 此选项强制您使用 import type 和 export type 从而实现更加可预测的行为和更少的不必要的导入/使用 module: NodeNext,它还会强制您使用正确的 ESM或者CJS导入语法 */ "verbatimModuleSyntax": true } } 严格模式选项 { "compilerOptions": { /* 启用所有严格类型检查选项,不可或缺 */ "strict": true, /* 组织您访问数组或对象,除非先检查其是否已定义。这是防止运行时错误的好方法,应该设置 */ "noUncheckedIndexedAccess": true, /* 使 overriede 关键字真正有用 */ "noImplicitOverride": true } } 使用 TypeScript 进行转义 { "compilerOptions": { /* 告诉 TypeScript 使用什么模块语法。 NodeNext 是 Node的最佳选项 */ "module": "NodeNext", /* 告诉 TypeScript 将编译后的 JavaScript 文件放在哪里 */ "outDir": "dist" } } Lib 构建 如果你想构建一个 lib 库 { "compilerOptions": { /* 告诉 TypeScript 发出 .d.ts 文件,这是必须的,以便lib 可以自动完成 .js */ "declaration": true } } 在 Monorepo 中构建 Lib { "compilerOptions": { /* */ "declaration": true, /* 告诉 TypeScript 发出 .tsbuildinfo 文件。这会告诉 TypeScript 您的项目是 monorepo 的一部分,并且它还帮助它缓存构建以加快运行速度 */ "composite": true, /* 告诉 TypeScript 构建出源码映射和声明映射,这是必须的。当您的库进行调试时,他们可以使用转到定义跳转到原始代码 */ "sourceMap": true, /* 声明映射:同上 */ "declarationMap": true } } 不使用 TypeScript 进行转义 如果你没有使用 tsc 来转换代码。即使 TypeScript 作为 linter。那么你会需要下面的选项 { "compilerOptions": { /* preserve 是最好的选择,因为它最接近的模仿了捆绑器处理模块的方式。 */ "module": "preserve", /* 告诉 TypeScript 不要输出任何文件,当你使用捆绑器时,这很重要,这样你就不会输出无用的 js 文件 */ "noEmit": true } } 在 DOM 中运行 { "compilerOptions": { /* 告诉 TypeScript 要包含哪些内置类型,es2022 是最稳定的选择, dom 和 dom.iterable 为你提供 window, document 类型 */ "lib": ["es2022", "dom", "dom.iterable"] } } 不在 DOM 中运行 { "compilerOptions": { "lib": ["es2022"] } } 参考 The TSConfig Cheat Sheet | Total TypeScript GitHub - total-typescript/tsconfig: The simplest way to set up your tsconfig.json