Fwio

TS Config 简记

Fwio

总结一些 TSConfig 文件的选项意义。

  • 一个 TSConfig 文件表示其所在目录是 TypeScript 或 JavaScript 项目的根目录

Root Fields

files

  • 指定项目包含哪些文件。

extends

  • extends的值是一个包含指向要继承的另一个 TSConfig 文件的路径。
  • 首先加载基文件(base file)中的配置(即extends指向的文件),然后被派生文件的配置覆盖
  • 配置文件中的所有相对路径都将相对于它们所在的配置文件进行解析。
  • references是顶层属性中唯一不能被继承的。

include

  • 以数组指定项目要包含的文件或模式。
  • includeexclude支持通配符来生成全局模式(glob patterns):
    • *:匹配零或多个字符(不包含目录间隔符)
    • ?:匹配任意一个字符(不包含目录间隔符)
    • **/:匹配嵌套任意级的任意目录。

exclude

  • 以数组指定在解析include时,应该专门排除的文件。

references

  • references为数组的形式,可将 TypeScript 项目的结构组织为更小的部分。
  • 使用项目引用(references)可以极大地缩短构建和编辑器交互的时间,强制组件之间的逻辑分离,并以改进的方式组织代码。
  • 每个referencepath属性可以指向一个包含 TS Config 文件的目录。
  • 当你引用一个项目时,会带来以下不同:
    • 从引用的项目导入模块,将变为加载其输出的声明文件(.d.ts)。
    • 如果引用的项目生成了一个 outFile,这个 outFile 的.d.ts 文件的声明会对该项目可见
    • 构建模式会自动构建所需的引用项目。

Compiler Options

baseUrl

  • 指定解析非绝对模块名所依据的根目录。
  • "baseUrl": "./"会查找ts.config.json所在目录的文件。

module

  • 应该为每个项目设置module,表示项目所使用的模块方案。
  • 改变module也会影响moduleResolution
  • es6(es2015)es2020的主要区别是,es2020引入了动态import()import.meta

moduleResolution

  • 指定模块的解析策略

composite

rootDir

  • 所有非声明输入文件的最长公共路径

  • 如果设置了composite,则根目录的默认值为包含tsconfig.json文件的目录。

  • 举例:

  • MyProj
    ├── tsconfig.json
    ├── core
    │   ├── a.ts
    │   ├── b.ts
    │   ├── sub
    │   │   ├── c.ts
    ├── types.d.ts
    
  • 其推断出的rootDir是最长公共路径core/,那么最后导出的 TypeScript 为:

  • MyProj
    ├── dist
    │   ├── a.js
    │   ├── b.js
    │   ├── sub
    │   │   ├── c.js
    

types

  • 默认情况下,所有可见@types包都会被纳入编译。
  • 任何封闭文件夹内的node_modules/@types都被认为是可见的。
  • 如果type被指明,则只有列出的包会被包含在全局作用域内。

lib

  • TypeScript 为内置 JS APIs 包含了一个默认集,包括浏览器环境中对象的类型定义。

  • TypeScript 也包含了 JS 的新特性,比如类型Map的定义。

  • 从 TypeScript 4.5 开始,lib 文件可以被 npm 模块覆盖。