tsconfig.json的速查表和完整解释

原文地址:www.totaltypescript.com/tsconfig-ch...

文章主要包括基本选项、严格性、是否使用TypeScript进行转译、是否在DOM中运行代码、是否为库构建以及是否在Monorepo中为库构建,每个部分都详细列举了相关的配置选项及其作用,并提供了相关链接以便读者进一步了解、并更容易配置TypeScript。

1、配置速查表如下:

sql 复制代码
{

  "compilerOptions": {

    /* Base Options: */

    "esModuleInterop": true,

    "skipLibCheck": true,

    "target": "es2022",

    "verbatimModuleSyntax": true,

    "allowJs": true,

    "resolveJsonModule": true,

    "moduleDetection": "force",
    

    /* Strictness */

    "strict": true,

    "noUncheckedIndexedAccess": true,
    

    /* If transpiling with TypeScript: */

    "moduleResolution": "NodeNext",

    "module": "NodeNext",

    "outDir": "dist",
    

    /* If NOT transpiling with TypeScript: */

    "moduleResolution": "Bundler",

    "module": "ESNext",

    "noEmit": true,
    

    /* If your code runs in the DOM: */

    "lib": ["es2022", "dom", "dom.iterable"],
    

    /* If your code doesn't run in the DOM: */

    "lib": ["es2022"],
    

    /* If you're building for a library: */

    "declaration": true,
    

    /* If you're building for a library in a monorepo: */

    "composite": true,

    "sourceMap": true,

    "declarationMap": true

  }

}

2、各部分配置详解

2.1 基本选项配置

json 复制代码
{

  "compilerOptions": {

    "esModuleInterop": true,

    "skipLibCheck": true,

    "target": "es2022",

    "verbatimModuleSyntax": true,

    "allowJs": true,

    "resolveJsonModule": true,

    "moduleDetection": "force"

  }

}
  • esModuleInterop:有助于修复 CommonJS 和 ES Modules 之间的一些不兼容之处。
  • skipLibCheck:跳过对 .d.ts 文件的类型检查。这对性能很重要,否则会检查所有的 node_modules。
  • target:你要目标的 JavaScript 版本。我建议选择 es2022 而不是 esnext,以获得更稳定的支持。
  • verbatimModuleSyntax:在 .cts 和 .mts 文件中,此选项会使 import 和 export 语法更加严格,产生严格的错误。
  • allowJsresolveJsonModule:允许你导入 .js 和 .json 文件。这总是很有用的。
  • moduleDetection:此选项强制 TypeScript 将所有文件视为模块。这有助于避免"无法重新声明块范围变量"的错误。

2.2 严格性配置

json 复制代码
{

  "compilerOptions": {

    "strict": true,

    "noUncheckedIndexedAccess": true

  }
}
  • strict:启用所有严格的类型检查选项。不可或缺。
  • noUncheckedIndexedAccess:防止在没有首先检查数组或对象是否已定义的情况下访问它们。这是防止运行时错误的绝佳方法,应该真正包含在严格选项中。

大部分人推荐在 tsconfig.json 的基本配置中包括严格性选项,这是一个精彩的存储 TSConfig 选项的仓库。这些选项包括许多我认为有点"啰嗦"的规则,比如 noImplicitReturnsnoUnusedLocalsnoUnusedParametersnoFallthroughCasesInSwitch。我建议只有在你需要这些规则时才将它们添加到你的 tsconfig.json 中。

2.3 使用typeScript代码转义

json 复制代码
{

  "compilerOptions": {

    "moduleResolution": "NodeNext",

    "module": "NodeNext",

    "outDir": "dist"

  }
}
  • moduleResolution:告诉 TypeScript 如何解析模块。如果你编写的代码是用于在 Node.js 中运行的话,NodeNext 是最佳选项。
  • module:告诉 TypeScript 使用什么模块语法。如果是针对 Node.js 编写的代码,NodeNext 是最佳选项。
  • outDir:告诉 TypeScript 将编译后的 JavaScript 文件放在何处。"dist" 是我首选的约定,但你也可以根据自己的需求选择其他目录。

2.4 代码检查工具

json 复制代码
{

  "compilerOptions": {

    "moduleResolution": "Bundler",

    "module": "ESNext",

    "noEmit": true

  }
}
  • moduleResolution:如果你编写的代码意图与类似 Webpack、Rollup、Babel、SWC 或 ESBuild 等工具一起捆绑,那么 "Bundler" 是最佳选项,因为它最符合模块捆绑工具的处理方式。
  • module:如果你的代码意图与这些工具一起捆绑,那么 "ESNext" 是最佳选项,因为它最接近捆绑工具对模块的处理方式。

2.5 是否运行在DOM中

json 复制代码
{

  "compilerOptions": {

    "lib": ["es2022", "dom", "dom.iterable"]
  }
}
  • lib:告诉 TypeScript 包含哪些内置类型。为了稳定性,"es2022" 是最佳选项。而 "dom" 和 "dom.iterable" 提供了用于 window、document 等的类型定义。

2.6 不运行在DOM中

json 复制代码
{

  "compilerOptions": {

    "lib": ["es2022"]
  }
}

2.7 构建库

json 复制代码
{

  "compilerOptions": {

    "declaration": true
  }
}

declaration 选项告诉 TypeScript 生成 .d.ts 文件。这是为了让库能够在你创建的 .js 文件上获得自动完成功能所必需的。

2.8 在monorepo中构建库

json 复制代码
{

  "compilerOptions": {

    "declaration": true,

    "composite": true,

    "sourceMap": true,

    "declarationMap": true
  }
}
  • composite:告诉 TypeScript 生成 .tsbuildinfo 文件。这告诉 TypeScript 你的项目是 monorepo 的一部分,也有助于缓存构建以提高运行速度。
  • sourceMapdeclarationMap:告诉 TypeScript 生成源映射(source maps)和声明映射(declaration maps)。这些是为了让你的库的使用者在调试时能够通过 "跳转到定义" 功能跳转到原始源代码。
相关推荐
正小安17 分钟前
如何在微信小程序中实现分包加载和预下载
前端·微信小程序·小程序
_.Switch2 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
一路向前的月光2 小时前
Vue2中的监听和计算属性的区别
前端·javascript·vue.js
长路 ㅤ   2 小时前
vite学习教程06、vite.config.js配置
前端·vite配置·端口设置·本地开发
长路 ㅤ   2 小时前
vue-live2d看板娘集成方案设计使用教程
前端·javascript·vue.js·live2d
Fan_web2 小时前
jQuery——事件委托
开发语言·前端·javascript·css·jquery
安冬的码畜日常2 小时前
【CSS in Depth 2 精译_044】第七章 响应式设计概述
前端·css·css3·html5·响应式设计·响应式
莹雨潇潇3 小时前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
Jiaberrr3 小时前
Element UI教程:如何将Radio单选框的圆框改为方框
前端·javascript·vue.js·ui·elementui
Tiffany_Ho4 小时前
【TypeScript】知识点梳理(三)
前端·typescript