[英]how does the typescript compiler discover npm packages with types?
可以通過tsconfig.json
配置打字稿編譯器。 這還提供了用於使用typeRoots
鍵發現類型定義文件的typeRoots
。
默認:
默認情況下,所有可見的“ @types”包均包含在您的編譯中。 任何封閉文件夾的node_modules / @ types中的軟件包都被視為可見; 特別是,這表示在./node_modules/@types/、../node_modules/@types/、../../node_modules/@types/等內的軟件包。
如果指定了typeRoots,則僅包含typeRoots下的軟件包
許多軟件包在單獨的@types/<package-name>
軟件包中提供其類型定義。 以Jquery為例。 同時,有些軟件包附帶捆綁的類型定義, Firebase會這樣做 。
為什么打字稿編譯器可以在不編輯typeRoots
設置的情況下選擇Firebase定義? 這些定義不在@types中,據我所知,默認情況下不應該使用這些定義。
在TypeScript的發布文檔中,您可以看到兩種為用戶提供類型的方法: https : //www.typescriptlang.org/docs/handbook/declaration-files/publishing.html
諸如Firebase之類的較大庫具有其自己的類型,請參閱packages / firebase / package.json#L58或packages / database / package.json#L68 。
打字稿讀取正在編譯的代碼中引用的所有已安裝軟件包的"typings"
的那些引用文件。
typeRoots
和常規import 'firebase'
typeRoots
”之間的區別是:
在typeRoot中提供類型文件后,這些類型將始終在編譯過程中使用(自動包含)。 這對於更改全局上下文(如jQuery,node等)的庫非常有用。它們提供了否則不易獲取的全局函數。
您可以通過說出import {Foo} from 'bar'
明確地導入它。 如果bar
封裝具有typing
在其物業的package.json,打字稿將它撿起來還對那些在typeRoots。
該文件說:
請記住,僅當您使用帶有全局聲明的文件(而不是聲明為模塊的文件)時,自動包含才重要。 例如,如果使用import“ foo”語句,TypeScript可能仍會遍歷node_modules和node_modules / @ types文件夾來查找foo包。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.