tsconfig.json 内容解读

tsconfig.json 文件是 TypeScript 项目的主要配置文件,用于指定编译选项和项目设置。通过这个文件,你可以控制编译器的行为,例如输出文件的路径、模块解析方式、严格类型检查等。

以下是一些常见的 tsconfig.json 属性及其详细解释:

顶层属性

1、compilerOptions
  • 包含编译器选项,用于控制编译过程。
javascript 复制代码
{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "outDir": "./dist",
    "strict": true
  }
}
2、include
  • 指定要包含在编译中的文件或文件夹。
  • 支持通配符(如 * 和 **)。
javascript 复制代码
{
  "include": ["src/**/*"]
}
3、exclude
  • 指定要排除在编译之外的文件或文件夹。
  • 支持通配符(如 * 和 **)。
javascript 复制代码
{
  "exclude": ["node_modules", "dist"]
}
4、files
  • 显式列出要包含在编译中的文件。
  • 不支持通配符。
javascript 复制代码
{
  "files": ["src/index.ts", "src/utils.ts"]
}
5、references
  • 用于项目引用,支持多项目构建。
javascript 复制代码
{
  "references": [
    { "path": "./src" },
    { "path": "./test" }
  ]
}
6、extends
  • 继承另一个 tsconfig.json 文件的配置。
javascript 复制代码
{
  "extends": "../tsconfig.base.json"
}

compilerOptions 属性

1、target
  • 指定编译后的 JavaScript 版本。
  • 常见值:es3, es5, es6(或 es2015),es2017, es2018, es2019, es2020, es2021, esnext。
javascript 复制代码
"target": "es6"
2、module
  • 指定模块代码生成的方式。
  • 常见值:none, commonjs, amd, system, umd, es6(或 es2015),es2020, esnext。
javascript 复制代码
"module": "commonjs"
3、outDir
  • 指定编译输出文件的目录。
javascript 复制代码
"outDir": "./dist"
4、rootDir
  • 指定源代码的根目录。
  • 编译器会根据这个目录来确定输出文件的相对路径。
javascript 复制代码
"rootDir": "./src"
5、strict
  • 启用所有严格的类型检查选项。
  • 包括 noImplicitAny, noImplicitThis, alwaysStrict, strictBindCallApply, strictFunctionTypes, strictNullChecks, strictPropertyInitialization。
javascript 复制代码
"strict": true
6、esModuleInterop
  • 启用 CommonJS 和 ES 模块之间的互操作性。
javascript 复制代码
"esModuleInterop": true
7、skipLibCheck
  • 跳过对库文件的类型检查,可以加快编译速度。
javascript 复制代码
"skipLibCheck": true
8、forceConsistentCasingInFileNames
  • 确保文件名在导入时保持一致的大小写。
javascript 复制代码
"forceConsistentCasingInFileNames": true

9、resolveJsonModule:

  • 允许导入 JSON 模块。
javascript 复制代码
"resolveJsonModule": true
10、allowJs
  • 允许编译 JavaScript 文件。
javascript 复制代码
"allowJs": true
11、checkJs
  • 对 JavaScript 文件进行类型检查。
javascript 复制代码
"checkJs": true
12、declaration
  • 生成 .d.ts 声明文件。
javascript 复制代码
"declaration": true
13、sourceMap

生成源映射文件,便于调试。

javascript 复制代码
"sourceMap": true
14、noEmit
  • 不生成输出文件,仅进行类型检查。
javascript 复制代码
"noEmit": true
15、lib
  • 指定编译器可以使用的 JavaScript 标准库的列表。
  • 常见值:dom, dom.iterable, es5, es6, es2015, es2016, es2017, es2018, es2019, es2020, es2021, esnext。
javascript 复制代码
"lib": ["dom", "es6"]
16、moduleResolution
  • 指定模块解析策略。
  • 常见值:node, classic。
javascript 复制代码
"moduleResolution": "node"
17、baseUrl
  • 设置模块解析的基准目录。
javascript 复制代码
"baseUrl": "."
18、paths
  • 用于模块解析的路径映射。
javascript 复制代码
"paths": {
  "@src/*": ["src/*"],
  "@utils/*": ["src/utils/*"]
}
19、typeRoots
  • 指定类型声明文件的根目录。
javascript 复制代码
"typeRoots": ["./types", "./node_modules/@types"]

20、types

  • 指定全局类型声明文件。
javascript 复制代码
"types": ["node", "jest"]

21、noUnusedLocals

  • 报告未使用的局部变量。
javascript 复制代码
"noUnusedLocals": true

22、noUnusedParameters

  • 报告未使用的函数参数。
javascript 复制代码
"noUnusedParameters": true

23、noImplicitReturns

  • 报告函数中隐式的 any 类型返回值。
javascript 复制代码
"noImplicitReturns": true

24、noFallthroughCasesInSwitch

  • 报告 switch 语句中的 fall-through 情况。
javascript 复制代码
"noFallthroughCasesInSwitch": true

示例 tsconfig.json

javascript 复制代码
{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "resolveJsonModule": true,
    "allowJs": true,
    "checkJs": true,
    "declaration": true,
    "sourceMap": true,
    "noEmit": false,
    "lib": ["dom", "es6"],
    "moduleResolution": "node",
    "baseUrl": ".",
    "paths": {
      "@src/*": ["src/*"],
      "@utils/*": ["src/utils/*"]
    },
    "typeRoots": ["./types", "./node_modules/@types"],
    "types": ["node", "jest"],
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist"]
}

通过合理配置 tsconfig.json,可以更好地管理和控制 TypeScript 项目的编译过程,提高开发效率和代码质量。每个属性都有其特定的用途,可以根据项目的具体需求进行调整。

相关推荐
中文呀3 小时前
三维 GIS 离线缓存实战:逆向 CesiumOfflineCache,并亲手为它补上"自动更新"能力
前端
前进前进前进4 小时前
TRAE 全链路实战:做了一个警示牌一键生成器:纯 Canvas、单文件、零依赖
前端
小万7425 小时前
God‘s Eye View 深度解析:15 路公开信号 + CesiumJS 的浏览器级 OSINT 控制台,60 帧渲染的“真实间谍卫星模拟器”
前端
IT星宿5 小时前
浏览器标签页全是一个图标:我用名字哈希生成 favicon,让每个项目都有身份标识
前端
全栈项目管理程序猿5 小时前
ArcGIS JS 基础教程(32):体元系列 - VoxelSlice 体元切片
前端·javascript
拖孩8 小时前
AI 帮我写的小程序「厨菜记」上线满月了,挣了两百块!!!
前端·后端·微信小程序
用户360055579008 小时前
Kestrel_VLLM - 13 · 为什么排除 MoE FFN Tiling 与 Tensor Core
前端
Hilaku8 小时前
AI 流式输出都用 SSE,什么时候必须换 WebSocket?
前端·javascript·程序员
奇牙coding8 小时前
Codex CLI 升级后多文件编辑静默失效:config.yaml 枚举变更排查与修复指南
java·前端·javascript·ai
小羊没烦恼!8 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp