TypeScript使用tsconfig.json文件作为其配置文件,当一个目录中存在**tsconfig.json**文件,则认为该目录为**TypeScript**项目的根目录。
compilerOptions
baseUrl
**baseUrl**用来指定基目录以解析非相对模块名称,默认是当前目录。如果写代码的时候厌倦了总是看起来像“../”或“./”的导入,或者需要在移动文件时更改它们,这是解决这个问题的好方法。
src├── api│ └── index.ts└── pages└── App└── index.vue
import api from '../../api/index'
{"compilerOptions": {"baseUrl": "./src"}}
import api from 'api/index'
baseUrl配置只是起静态编译提示作用,当运行代码时,还是需要配置alias,来避免报错。
typeRoots、types
**typeRoots**用来指定默认的类型声明文件查找路径,指定路径下面所有的声明文件会被ts编译器自动包含进来,默认指向node_modules/@types,包括当前目录及其上层所有目录的node_nodules/@types。如果指定了typeRoots,ts编译器会从指定的路径去引入声明文件,而不是node_modules/@types,比如以下配置会从typings路径下去搜索声明:
{"compilerOptions": {"typeRoots" : ["./typings"]}}
如果还想包含node_modules/@types里面的包,则需要在typeRoots中加进去:
{"compilerOptions": {"typeRoots" : ["node_modules/@types", "./typings"]}}
如果不希望自动引入typeRoots指定路径下的所有声明文件,那可以使用types指定自动引入哪些文件,比如:
{"compilerOptions": {"types" : ["node", "lodash", "express"]}}
以上配置只会引入typeRoots指定路径下的node、lodash、express三个声明文件,其它的声明文件则不会被自动引入。
files、include、exclude
这三个属性控制着ts编译器的编译范围。
files属性作用是指定需要编译的单个文件列表,默认包含当前目录和子目录下所有ts文件。
{// ..."files": [// 指定编译文件是src目录下的shen.ts文件"src/shen.ts"]}
include 属性作用是指定编译需要编译的文件或目录。
{// ..."include": [// "src" // 会编译src目录下的所有文件,包括子目录// "src/*" // 只会编译src一级目录下的文件"scr/*/*" // 只会编译src二级目录下的文件]}
exclude属性作用是指定编译器需要排除的文件或文件夹,默认排除node_modules、bower_components,jspm_packages和outDir属性指定的目录文件夹下文件。
{// ..."exclude": ["src/lib" // 排除src目录下的lib文件夹下的文件不会编译]}
include和exclude属性指定一个文件glob匹配模式列表。 比如*、?、**/这种通配符的形式。如果一个glob模式里的某部分只包含*或.*,那么仅有ts文件会被包含在内。
ts文件指的是:
- 拓展名为
.ts、.tsx、.d.ts的文件 - 如果我们设置了
allowJs = true,那么.js、.jsx也会被视为ts文件
如果同时设置了files和include,那么编译器会把两者指定的文件引入,而exclude只会对include有效,对files是无效的,即files指定的文件如果同时被exclude排除,那么该文件仍然会被编译器引入。
三者的优先级为
files>exclude>include
extends
extends属性作用是引入其他配置文件,继承配置。extends的值是一个字符串,包含指向另一个要继承文件的路径。在原文件里的配置先被加载,然后被来至继承文件里的配置重写。 如果发现循环引用,则会报错。配置文件里的相对路径在解析时相对于它所在的文件。
{// ...// 把基础配置抽离成tsconfig.base.json文件,然后引入"extends": "./tsconfig.base.json"}
