Как заставить tsc использовать типы проверяемых пакетов вместо типов места его вызова?

Доброго дня.
Столкнулся с запутанной ситуацией. Есть несколько репозиториев: один главный, и несколько общих библиотек, которые ставятся как node модули, а локально линкуются посредством yarn link. Тайпчекинг осуществляется посредством утилиты tsc.

Для обрисовки картины, пусть будет репозиторий Vault, который использует библиотеку Utils. В Utils установлен dayjs, неплохая либа для работы с датой. Она добавляет свои объявления типов, все ок. Я использую встроенный в dayjs тип Dayjs в некоторых случаях, для операций с данным объектом.

Проблема следующая: когда запускаем yarn tsc внутри Utils, чтобы проверить корректность типов самой Utils, все работает, tsc видит типы от библиотеки dayjs. А когда я запускаю tsc внутри Vault, он валится с сообщением "cannot find type Dayjs", и ссылается на строку, где я использую один из модулей пакета Utils. В самом Vault библиотека dayjs и тип Dayjs нигде не используются!

Иными словами, tsc залезает в другой репозиторий и проверяет типы там, но с использованием деклараций из проекта, в котором он был вызван.

Решение в лоб - установить в Vault либу dayjs. Прибегну в крайнем случае, ибо в Vault используется враппер из Utils для работы с датой.

Надеюсь, понятно объяснил суть проблемы. Кто сталкивался? Как решить проблему?
Заранее спасибо.
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ответы на вопрос 1
В самом Vault библиотека dayjs и тип Dayjs нигде не используются!

А что вы понимаете под использованием? Очевидно, для исполнения вам нужен dayjs, и он должен ставиться как рантайм-зависимость Utils. Чтобы избавиться от такой зависимости, вам тогда нужно положить dayjs внутрь Utils тем или иным способом, например собрать Utils тем же роллапом в бандл. Я правда не вижу в этом необходимости - бандлятся обычно только конечные приложения, а то что есть транзитивные зависимости у библиотеки -

Другое дело если вы видите проблему в том что требуется информация о ТИПА Dayjs. Тогда уточните, как во что вы компилируете Utils и не протекат ли Dayjs через публичный интерфейс Utils.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы