Теперь, когда вы, следуя шагам из этого руководства, создали файл объявлений, пришло время опубликовать его в npm. Есть два основных пути для этого:
- включить объявления в npm-пакет
- опубликовать в организации @types в npm.
Если вы управляете пакетом, для которого собираетесь опубликовать объявления, то первый способ подойдет лучше всего. В этом случае объявления и JavaScript-код всегда будут вместе.
Table of Contents #
Включение объявлений в свой npm-пакет #
Если у пакета есть главный .js
-файл, то в package.json
нужно также указать главный файл с объявлениями. Для этого установите свойство types
, которое должно указывать на файл объявлений. Например:
{ "name": "awesome", "author": "Vandelay Industries", "version": "1.0.0", "main": "./lib/main.js", "types": "./lib/main.d.ts" }
Стоит отметить, что поле "typings"
синонимично "types"
и также может быть использовано.
Также отметим, что если главный файл объявлений имеет имя index.d.ts
и находится в корне директории пакета (рядом с index.js
), то указывать свойство "types"
не обязательно, хотя и желательно.
Зависимости
Все зависимости управляются npm. Убедитесь, что все пакеты с объявлениями, от которых зависит ваш пакет, указаны в файле package.json
в секции "dependencies"
. Например, представим, что мы создали пакет, который использует Browserify и TypeScript.
{ "name": "browserify-typescript-extension", "author": "Vandelay Industries", "version": "1.0.0", "main": "./lib/main.js", "types": "./lib/main.d.ts", "dependencies": [ "browserify@latest", "@types/browserify@latest", "typescript@next" ] }
Здесь указывается, что наш пакет зависит от пакетов browserify
и typescript
. Пакет browserify
из npm не поставляется со своими файлами объявлений, поэтому для их добавления нужно указать зависимость от @types/browserify
. typescript
, напротив, поставляется с файлами объявлений, поэтому никаких дополнительных зависимостей не требуется.
Наш пакет представляет доступ к объявлениям из обоих этих пакетов, и поэтому у пользователя нашего пакета browserify-typescript-extension
также должны быть установлены эти зависимости. Поэтому используется "dependencies"
, а не "devDependencies"
, поскольку во втором случае нашим пользователям пришлось бы устанавливать зависимости вручную. Если бы мы писали приложение, работающее из командной строки, и этот пакет не предполагалось бы использовать как библиотеку, то можно было бы использовать devDependencies
.
Опасные места
/// <reference path="..." />
Не используйте /// <reference path="..." />
в файлах объявлений.
/// ....
Вместо этого используйте /// <reference types="..." />
.
/// ....
Обязательно еще раз прочтите Использование зависимостей для большей информации.
Упаковка зависимых объявлений
Если объявления типов зависят от других пакетов:
- Не объединяйте их со своими, храните каждый в своем файле.
- Не копируйте объявления в свой пакет.
- Добавьте зависимость от npm-пакета с объявлениями для нужного пакета, если они не поставляются вместе с ним.
Публикация файлов объявлений
После публикации своего пакета с файлами объявлений добавьте ссылку на него в список внешних пакетов репозитория DefinitelyTyped. Это даст инструментам поиска понять, что ваш пакет предоставляет свои собственные объявления.
Публикация в @types #
Пакеты организации @types автоматически публикуются из репозитория DefinitelyTyped с помощью инструмента types-publisher. Чтобы опубликовать свои объявления как пакет в организации @types, отправьте запрос на включение изменений (pull request) в репозиторий https://github.com/DefinitelyTyped/DefinitelyTyped. Больше информации можно найти на странице руководства по участию.
Поддержите перевод документации:
Documentation generated by mdoc.