打字稿编译器可以经由被配置tsconfig.json
。 这也提供了用于发现类型定义文件的设置与typeRoots
关键。
默认:
默认情况下,所有可见的“@types”包包含在你的汇编。 在node_modules包/ @类型的任何封闭的文件夹被认为是明显的; 具体而言,这意味着./node_modules/@types/内包,../node_modules/@types/,../../node_modules/@types/,等等。
如果指定typeRoots,只有在typeRoots包将被纳入
许多软件包提供了在一个单独的类型定义@types/<package-name>
包。 jQuery的的例子。 与此同时,也有捆绑的类型定义出货包, 火力地堡做到这一点。
打字稿编译器为什么可以拿起火力地堡的定义,而无需编辑typeRoots
设置? 这些定义并不位于@types,而且据我了解,应该不会被默认回升。
在打字稿发布文档可以看到有两种方法可以为你的用户提供类型: https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html
- 与NPM包捆绑,或
- 发布到NPM的@types组织。
像火力地堡更大的图书馆有自己的类型,请参阅包/火力/#的package.json L58或包/数据库/的package.json#L68 。
打字稿在读取这些引用的文件"typings"
正在编译了在你的代码中引用的所有安装的软件包。
之间的区别typeRoots
和正规import 'firebase'
是:
一旦你在typeRoot提供类型文件的类型在编译过程中(自动包含)始终使用。 这是伟大的图书馆变革全球范围内,如jQuery,节点等,他们提供可能,否则不会轻易被拾起的全局函数。
你明确地说导入import {Foo} from 'bar'
。 如果bar
封装具有typing
在其物业的package.json,打字稿将它捡起来还对那些在typeRoots。
该文件说,这:
请记住,如果你使用的是与全局声明文件的自动列入只是重要的(而不是声明为模块文件)。 如果您使用的进口“foo”的说法,例如,打字稿仍可能显得通过node_modules&node_modules / @类型的文件夹,找到foo软件包。