从TypeScript 2.*版本开始,'tsconfig.json'有以下两个可用属性:
{
'typeRoots': [],
'types': []
}
我将按顺序详细说明两者。
- 'typeRoots' 指定了转译器应在其中查找类型定义的根文件夹(例如:'node_modules')。
如果您一直在使用 TypeScript,您可能已经知道对于那些没有用 TypeScript 编写的不同库,您需要定义才能让编译器识别全局变量并提供 IntelliSense 支持。
这个问题已经被项目(repos)所解决,例如 'DefinitelyTyped',它们使用工具如 tsd 或 typings 模块来下载您项目所需的类型定义文件,但它们也有自己的需要单独维护的 'json' 文件。
在 TypeScript 2.* 中,您现在可以使用 'npm' 获取定义依赖项。因此,您现在可以只使用:
npm i @types/{LIB}
而不是使用一个单独的 cli 库,如 tsd 或 typings。这种方式可以使用 package.json 来管理所有依赖项,并且可以轻松消除在项目中维护另一个 'json' 文件的必要性。
- 'types' 是将在类型根目录中找到的实际库名称。
所以假设您的 typeRoots 的默认配置是:
"typeRoots": [
"./node_modules/@types"
]
假设你现在想为你的项目使用Jasmine作为测试框架,所以你已经配置好了typeRoot文件夹,现在你所需要做的就是执行以下命令: npm i @types/jasmine --save-dev
在安装定义包后,只需按照以下方式配置'tsconfig.json'中的“types”属性:
"types": [
"core-js",
"jasmine",
"requirejs",
"chance"
]
总之,你需要告诉TS编译器以下内容:
typeRoots:你需要在这些文件夹中查找类型定义文件。
types:在上面提供的某个文件夹中,你将会找到这些框架的定义文件(子文件夹)。
因此,根据上述场景,如果我们添加另一个根目录:
"typeRoots": [
"./node_modules/@types",
"./custom_definitions"
],
"types": [
"jasmine",
]
TS现在将在以下路径中查找声明文件:
./node_modules/@types/jasmine
或者
./custom_definitions/jasmine