Руководства по публикации объявлений типов кажутся немного устаревшими и редкими в нескольких областях.
Я попытаюсь детально сравнить оба сценария.
1.Типы в комплекте с пакетом npm
1.1.С точки зрения потребителя упаковки
1.1.1.Плюсы
Как правило, типы пакетов в комплекте более удобны благодаря упорядоченному управлению зависимостями.
- нет необходимости в дополнительной зависимости @types (добавление зависимости пакета)
- нетнеобходимо синхронизировать версии между пакетом и его типами (обновление зависимости пакета)
1.1.2.Минусы
ограниченные способы отказаться от использования пакетов связанных типов
Включает случаи, когда потребителю необходимо изменить или заменить объявления типов.
Процесс может быть значительно проблематичным в проектах с продуманными настройками сборки из-за уже ограниченных параметров конфигурации.
1.2.С точки зрения автора пакета
1.2.1.Плюсы
- Владелец библиотеки может выпускать исправления и обновления объявлений типов по своему усмотрению, с любой периодичностью или по расписанию
- без ограничений на сторонние или внешние зависимости типа
- обеспечение одновременной поддержки нескольких версий осуществляется так же, как и для фактического кода
1.2.2.Минусы
Наличие типов в комплекте с пакетом означает, что фактически каждый раз публикуется версия двух контрактов API.
Пример:
Давайте предположим, что библиотека предназначена для того, чтобы соответствовать семи версиям.
- последний выпуск -> 1.0.0
- основная версия повреждена из-за критического изменения -> 2.0.0
- сообщается о критической ошибке в объявлениях типов, релиз не работает для группы пользователей с проектами машинописи
- исправление в типах является серьезным изменением
Варианты для следующей версии:
A. 2.XX -> нарушает правила semver для объявлений типов
B. 3.0.0 -> нарушает правила semver для фактического кода
Вероятно, существует множество вариантов такого сценария.
2.Публикация в определенном типе репозитория
2.1.С точки зрения потребителя упаковки
2.1.1.Плюсы
- простой отказ через удаление зависимости @types
2.1.2.Недостатки
- Потребитель пакета отвечает за синхронизацию версий пакета и связанных типов
2.2.С точки зрения автора пакета
2.2.1.Плюсы
- не влияют на цикл выпуска пакета
В репозитории DT есть две дополнительные особенности:
- библиотека dts-lint дляутверждения типа и тестирование типа
- глубокий анализ производительности и следа компилятора, включая различия между последней версией пакета и пакетом после модификаций PR.
Может быть включен первый инструментв другой пакет репо с небольшими усилиями.Я не уверен, можно ли повторить анализ в своем собственном репозитории, но он содержит много ценных данных.
2.2.2.Минусы
- нестандартный способ поддержки прошлых выпусков
график выпуска типа, ограниченный циклами обзора и выпуска DT
Предполагая, что создатель DefiniteTyped PRвладелец пакета @types, обычно требуется от одного до двух дней до слияния PR.Кроме того, существует небольшая задержка перед тем, как тип-издатель обновляет пакет @types npm, связанный с PR.
Дополнительный процесс проверки применяется в случаях, когда PR является первым вкладом автора в данный пакет.
с использованием внешних зависимостей
В справочнике по TypeScript сказано:
Если ваши определения типов зависят от другого пакета:
Не объединяйте его с вашим, храните каждый в отдельном файле.
Также не копируйте объявления в вашем пакете.
Зависит от пакета объявлений типа npm, еслион не упаковывает свои файлы объявлений.
Судя по количеству избыточных типов утилит, они вряд ли соблюдаются.
Автору объявлений типов разрешено использовать смежный репозиторий DTтипы.В зависимости от пакетов из этого списка требуется, чтобы они были в белом списке типов-издателей.
Новые пакеты могут быть добавлены в белый список путем отправки PR издателю типов.Потребовалось более двух недель, чтобы объединить мой пиар.Я не знаю, нормально ли это, так как я подал один пиар.
Объем репозитория DT
У меня нет сравнения или опыта кросс-IDE, но что касается сред JetBrains, объем памяти полностью проиндексированного проекта репо DT сделанIDE непригоден для использования.
Отключение перекомпиляции при изменениях помогает в некоторой степени.Разочарование IDE можно обойти, удалив содержимое репозитория DT, не относящееся к интересующему пакету.