В документах публикации в TypeScript вы видите, что есть два способа предоставить типы для ваших пользователей: https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html
- связывание с вашим пакетом npm или
- публикация в@types organization в npm.
Большие библиотеки, такие как Firebase, имеют свои собственные типы, см. packages / firebase / package.json # L58 или packages / database / package.json # L68 .
Typescripts считывает те файлы, на которые имеются ссылки, в "typings"
всех установленных пакетов, на которые есть ссылки в компилируемом коде.
Разница между typeRoots
иобычный import 'firebase'
- это:
После того, как вы предоставите файлы типов в typeRoot, эти типы всегда используются в процессе компиляции (автоматическое включение).Это отлично подходит для библиотек, изменяющих глобальный контекст, таких как jQuery, узел и т. Д. Они предоставляют глобальные функции, которые в противном случае было бы трудно подобрать.
Вы импортируете его явно, сказав import {Foo} from 'bar'
.Если пакет bar
имеет свойство typing
в свой файл package.json, Typescript подхватит его дополнительно к атрибутам typeRoots.
В документации говорится об этом:
Имейте в виду, что автоматическое включение важно, только если вы используете файлы с глобальными декларациями (в отличие от файлов, объявленных как модули).Например, если вы используете оператор импорта "foo", TypeScript может по-прежнему просматривать папки node_modules & node_modules / @ types для поиска пакета foo.