如何打字稿编译器发现与类型NPM包?(how does the typescript compile

2019-10-29 07:18发布

打字稿编译器可以经由被配置tsconfig.json 。 这也提供了用于发现类型定义文件的设置与typeRoots关键。

默认:

默认情况下,所有可见的“@types”包包含在你的汇编。 在node_modules包/ @类型的任何封闭的文件夹被认为是明显的; 具体而言,这意味着./node_modules/@types/内包,../node_modules/@types/,../../node_modules/@types/,等等。

如果指定typeRoots,只有在typeRoots包将被纳入

许多软件包提供了在一个单独的类型定义@types/<package-name>包。 jQuery的的例子。 与此同时,也有捆绑的类型定义出货包, 火力地堡做到这一点。

打字稿编译器为什么可以拿起火力地堡的定义,而无需编辑typeRoots设置? 这些定义并不位于@types,而且据我了解,应该不会被默认回升。

Answer 1:

在打字稿发布文档可以看到有两种方法可以为你的用户提供类型: https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html

  1. 与NPM包捆绑,或
  2. 发布到NPM的@types组织。

像火力地堡更大的图书馆有自己的类型,请参阅包/火力/#的package.json L58或包/数据库/的package.json#L68 。

打字稿在读取这些引用的文件"typings"正在编译了在你的代码中引用的所有安装的软件包。

之间的区别typeRoots和正规import 'firebase'是:

  1. 一旦你在typeRoot提供类型文件的类型在编译过程中(自动包含)始终使用。 这是伟大的图书馆变革全球范围内,如jQuery,节点等,他们提供可能,否则不会轻易被拾起的全局函数。

  2. 你明确地说导入import {Foo} from 'bar' 。 如果bar封装具有typing在其物业的package.json,打字稿将它捡起来还对那些在typeRoots。

该文件说,这:

请记住,如果你使用的是与全局声明文件的自动列入只是重要的(而不是声明为模块文件)。 如果您使用的进口“foo”的说法,例如,打字稿仍可能显得通过node_modules&node_modules / @类型的文件夹,找到foo软件包。



文章来源: how does the typescript compiler discover npm packages with types?