У меня есть некоторые определения типов, которые я хочу превратить в пакет npm, потому что я использую их в нескольких несвязанных проектах. (Я бы, скорее всего, назвал его @dfoverdx/ts-magic
.) Некоторые из этих проектов используют 3.x, а некоторые используют ›=4.2, где начальные и средние остаточные элементы в типах кортежей.
Можно ли написать несколько файлов объявлений, которые используют только те типы, которые работают в пользовательской версии TypeScript?
Я могу придумать четыре способа, которые могут работать, но я недостаточно знаю, как их реализовать, если они вообще возможны.
Используя значение
lib
вtsconfig.json
, пользователь может указать, какой файл декларации ts-magic включить. Тогда каждый файл объявления может использовать директиву с тройной косой чертой для ссылки на файл объявления предыдущей версии.У меня может быть несколько подпакетов с зависимостями от предыдущих подпакетов. Я бы предпочел не идти по этому пути, тем более что в NPM нет такой вещи, как вложенная область, и я бы я не хочу использовать область, отличную от моего имени пользователя GitHub, и я не хочу поддерживать несколько отдельных пакетов в области
@dfoverdx
.Поэтому мы сталкиваемся с другой проблемой: некоторые из этих типов строго типизируют глобальные методы объекта, такие как Object.fromEntries(), и вещи, объявленные в
declare global {}
внешних контекстах - насколько я знаю-- не может быть ограничен файлами, которые включают файл объявления, в котором он был объявлен. То есть, если мой проект index.ts импортировал@dfoverdx/ts-magic/3.8
, потому что я вообще импортирую@dfoverdx/ts-magic
, он будет включать каждый файл объявления пакета.Какая-то магия в
package.json
с использованиемpeerDependencies
или какого-то другого свойства, о котором я не знаю.Какая-то директива с тройной косой чертой. Я подозреваю, что это не так.
Я не могу представить, что это не способ сделать это как-то. Мысли на правильном пути?
~1.0.0
совместим с typescript 3, а>2.0.0
совместим с typescript 4.2. Вы по-прежнему можете отправлять обновления для обеих основных версий. - person Alex Wayne   schedule 15.07.2021