TypeScript使用tsconfig.json文件作为其配置文件,当一个目录中存在**tsconfig.json**文件,则认为该目录为**TypeScript**项目的根目录

compilerOptions

baseUrl

**baseUrl**用来指定基目录以解析非相对模块名称,默认是当前目录。如果写代码的时候厌倦了总是看起来像“../”或“./”的导入,或者需要在移动文件时更改它们,这是解决这个问题的好方法。

  1. src
  2. ├── api
  3. └── index.ts
  4. └── pages
  5. └── App
  6. └── index.vue
  1. import api from '../../api/index'
  1. {
  2. "compilerOptions": {
  3. "baseUrl": "./src"
  4. }
  5. }
  1. import api from 'api/index'

baseUrl配置只是起静态编译提示作用,当运行代码时,还是需要配置alias,来避免报错。

typeRoots、types

**typeRoots**用来指定默认的类型声明文件查找路径,指定路径下面所有的声明文件会被ts编译器自动包含进来,默认指向node_modules/@types,包括当前目录及其上层所有目录的node_nodules/@types。如果指定了typeRootsts编译器会从指定的路径去引入声明文件,而不是node_modules/@types,比如以下配置会从typings路径下去搜索声明:

  1. {
  2. "compilerOptions": {
  3. "typeRoots" : ["./typings"]
  4. }
  5. }

如果还想包含node_modules/@types里面的包,则需要在typeRoots中加进去:

  1. {
  2. "compilerOptions": {
  3. "typeRoots" : ["node_modules/@types", "./typings"]
  4. }
  5. }

如果不希望自动引入typeRoots指定路径下的所有声明文件,那可以使用types指定自动引入哪些文件,比如:

  1. {
  2. "compilerOptions": {
  3. "types" : ["node", "lodash", "express"]
  4. }
  5. }

以上配置只会引入typeRoots指定路径下的nodelodashexpress三个声明文件,其它的声明文件则不会被自动引入。

files、include、exclude

这三个属性控制着ts编译器的编译范围。

files属性作用是指定需要编译的单个文件列表,默认包含当前目录和子目录下所有ts文件。

  1. {
  2. // ...
  3. "files": [
  4. // 指定编译文件是src目录下的shen.ts文件
  5. "src/shen.ts"
  6. ]
  7. }

include 属性作用是指定编译需要编译的文件或目录

  1. {
  2. // ...
  3. "include": [
  4. // "src" // 会编译src目录下的所有文件,包括子目录
  5. // "src/*" // 只会编译src一级目录下的文件
  6. "scr/*/*" // 只会编译src二级目录下的文件
  7. ]
  8. }

exclude属性作用是指定编译器需要排除的文件或文件夹,默认排除node_modulesbower_componentsjspm_packagesoutDir属性指定的目录文件夹下文件。

  1. {
  2. // ...
  3. "exclude": [
  4. "src/lib" // 排除src目录下的lib文件夹下的文件不会编译
  5. ]
  6. }

includeexclude属性指定一个文件glob匹配模式列表。 比如*?**/这种通配符的形式。如果一个glob模式里的某部分只包含*.*,那么仅有ts文件会被包含在内。

ts文件指的是:

  1. 拓展名为.ts.tsx.d.ts的文件
  2. 如果我们设置了allowJs = true,那么.js.jsx也会被视为ts文件

如果同时设置了filesinclude,那么编译器会把两者指定的文件引入,而exclude只会对include有效,对files是无效的,即files指定的文件如果同时被exclude排除,那么该文件仍然会被编译器引入。

三者的优先级为files> exclude> include

extends

extends属性作用是引入其他配置文件,继承配置extends的值是一个字符串,包含指向另一个要继承文件的路径。在原文件里的配置先被加载,然后被来至继承文件里的配置重写。 如果发现循环引用,则会报错。配置文件里的相对路径在解析时相对于它所在的文件。

  1. {
  2. // ...
  3. // 把基础配置抽离成tsconfig.base.json文件,然后引入
  4. "extends": "./tsconfig.base.json"
  5. }

references

reference