Можно ли использовать разные файлы объявлений для разных версий TypeScript?

У меня есть некоторые определения типов, которые я хочу превратить в пакет npm, потому что я использую их в нескольких несвязанных проектах. (Я бы, скорее всего, назвал его @dfoverdx/ts-magic.) Некоторые из этих проектов используют 3.x, а некоторые используют ›=4.2, где начальные и средние остаточные элементы в типах кортежей.

Можно ли написать несколько файлов объявлений, которые используют только те типы, которые работают в пользовательской версии TypeScript?

Я могу придумать четыре способа, которые могут работать, но я недостаточно знаю, как их реализовать, если они вообще возможны.

  1. Используя значение lib в tsconfig.json, пользователь может указать, какой файл декларации ts-magic включить. Тогда каждый файл объявления может использовать директиву с тройной косой чертой для ссылки на файл объявления предыдущей версии.

  2. У меня может быть несколько подпакетов с зависимостями от предыдущих подпакетов. Я бы предпочел не идти по этому пути, тем более что в NPM нет такой вещи, как вложенная область, и я бы я не хочу использовать область, отличную от моего имени пользователя GitHub, и я не хочу поддерживать несколько отдельных пакетов в области @dfoverdx.

    Поэтому мы сталкиваемся с другой проблемой: некоторые из этих типов строго типизируют глобальные методы объекта, такие как Object.fromEntries(), и вещи, объявленные в declare global {} внешних контекстах - насколько я знаю-- не может быть ограничен файлами, которые включают файл объявления, в котором он был объявлен. То есть, если мой проект index.ts импортировал @dfoverdx/ts-magic/3.8, потому что я вообще импортирую @dfoverdx/ts-magic, он будет включать каждый файл объявления пакета.

  3. Какая-то магия в package.json с использованием peerDependencies или какого-то другого свойства, о котором я не знаю.

  4. Какая-то директива с тройной косой чертой. Я подозреваю, что это не так.

Я не могу представить, что это не способ сделать это как-то. Мысли на правильном пути?


person dx_over_dt    schedule 15.07.2021    source источник
comment
Другой обходной путь: увеличить основную версию и позволить npm отсортировать правильную версию для включения. ~1.0.0 совместим с typescript 3, а >2.0.0 совместим с typescript 4.2. Вы по-прежнему можете отправлять обновления для обеих основных версий.   -  person Alex Wayne    schedule 15.07.2021
comment
@AlexWayne Возможно, это именно то, что я ищу.   -  person dx_over_dt    schedule 15.07.2021


Ответы (1)


Вы можете использовать версии типов. свойство в package.json файле.

person aleksxor    schedule 15.07.2021