Перейти к содержанию

Публикация

Для того чтобы подключать создаваемые декларации .d.ts с помощью пакетного менеджера npm, их нужно определить как npm-пакет (npm package). В дальнейшем этот пакет можно опубликовать с помощью того же пакетного менеджера npm в npm-репозитории, который может быть как публичным, доступным всем разработчикам, так и приватным, доступным только автору/команде. Кроме того можно и вовсе обойтись без публикации в репозиторий, подключая пакет с локального диска. Сама публикация здесь рассматриваться не будет, с этим процессом можно ознакомится в документации к пакетному менеджеру npm, но не будет лишнем упомянуть о тонкостях, которые привнес TypeScript.

Говоря о создании npm-пакета, мы подразумеваем создание описания нашего кода в файле с названием package.json. Для того, чтобы компилятор TypeScript смог использовать декларацию .d.ts, ему нужно помочь, присвоив полю types путь до неё.

// package.json

{
  "types": "path to file declaration .d.ts"
}

Помимо этого с помощью поля typesVersion можно указать декларацию в зависимости от версии TypeScript.

// package.json

{
  "typesVersions": {
    ">=3.1": { "*": ["ts3.1/index.d.ts"] }
  }
}

В случае, если версия среды TypeScript не подпадает под указанный диапазон, то разрешение кода будет выполнено с помощью декларации указанной в поле types.

// package.json
{
   "typesVersions": {
       ">=3.1": { "*": ["ts3.1/index.d.ts"] } // если версия TypeScript выше либо равна 3.1
   }
   // если версия TypeScript ниже версии 3.1, то будет выбрана декларация указана в поле types
   "types": "./dest/index.d.ts", // если версия TypeScript ниже версии 3.1
}

Правила, разрешающие использование версий библиотек TypeScript, полностью идентичны правилам диапазонов версионирования nodejs ranges.

Кроме того, можно указывать несколько диапазонов одновременно. Но нужно помнить, что порядок указания диапазонов важен, так как они могут перекрывать друг друга.

{
  "typesVersions": {
    ">=3.2": { "*": ["ts3.2/index.d.ts"] },
    ">=3.1": { "*": ["ts3.1/index.d.ts"] }
  }
}