Публикация библиотеки утилит типов
Упакуйте и опубликуйте пользовательские типы-утилиты в npm
«Публикация библиотеки утилит типов» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.
Что такое библиотека вспомогательных типов
Библиотека вспомогательных типов экспортирует только типы TypeScript — без кода, выполняемого во время работы программы. Популярные примеры: type-fest, ts-essentials и utility-types.
// A type utility library exports types like:
export type DeepPartial<T> = T extends object
? { [K in keyof T]?: DeepPartial<T[K]> }
: T;Структура проекта
Сохраняйте простоту: один файл src/index.ts, повторно экспортирующий все вспомогательные средства, и файл tsconfig.json, настроенный только на вывод объявлений.
// tsconfig.json
{
"compilerOptions": {
"declaration": true,
"emitDeclarationOnly": true,
"outDir": "dist",
"strict": true
}
}package.json для пакета только с типами
Задайте поля main и types, чтобы они указывали на объявления. Установите sideEffects: false для удаления неиспользуемого кода при встряхивании дерева.
{
"name": "@myorg/type-utils",
"version": "1.0.0",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"sideEffects": false,
"files": ["dist"]
}Генерация объявлений
Запустите tsc, чтобы сгенерировать файлы .d.ts. Для библиотеки только с типами результат JS пуст или минимален.
# Build declarations
npx tsc
# dist/index.d.ts is generatedВерсионирование и журналы изменений
Следуйте семантическому версионированию: несовместимые изменения типов требуют повышения мажорной версии, новые утилиты — минорной, а исправления — патч-версии.
# Bump version
npm version minor
# Generate changelog with conventional-changelog or changesetsПубликация в npm
Используйте npm publish или pnpm publish. Для пакетов с областью видимости в организации убедитесь, что Вы вошли в систему и настроили область видимости.
npm login
npm publish --access public
# or for private: npm publish --access restrictedСовместимость версий TypeScript
Укажите минимальную версию TypeScript, необходимую для работы Ваших утилит. Рекурсивные условные типы требуют TS 4.1+, а Awaited встроен начиная с TS 4.5+.
// package.json peerDependencies
{
"peerDependencies": {
"typescript": ">=4.5"
}
}Проверка типов с помощью tsd
Используйте пакет tsd, чтобы писать проверки на уровне типов, выполняемые во время CI и подтверждающие корректную работу Ваших утилит.
import { expectType } from "tsd";
import type { DeepPartial } from "@myorg/type-utils";
expectType<DeepPartial<{ a: { b: number } }>>({ a: {} });Документирование с помощью TSDoc
Добавляйте к типам комментарии JSDoc в формате /** */. Такие инструменты, как TypeDoc, создают по ним документацию API.
/**
* Makes all properties of T optional at every depth.
* @example type A = DeepPartial<{ x: { y: number } }> // { x?: { y?: number } }
*/
export type DeepPartial<T> = ...Распространение в монорепозитории
В монорепозитории публикуйте пакет типов как пакет рабочей области, чтобы другие приложения подключали его через workspace:*, а не через npm.
// Other package's package.json
{
"dependencies": {
"@myorg/type-utils": "workspace:*"
}
}Итоги: публикация библиотек типов
Библиотека утилит типов должна использовать emitDeclarationOnly: true, экспортировать типы из src/index.ts, версионироваться по semver, проверяться с помощью tsd, документироваться с помощью TSDoc и публиковаться в npm или реестре рабочей области.
Быстрая проверка
Какая опция tsconfig создаёт только файлы .d.ts без вывода JavaScript?
Чему Вы научились
Для публикации библиотеки утилит типов необходимы emitDeclarationOnly, корректные поля в package.json, проверки на уровне типов с помощью tsd, комментарии TSDoc и семантическое версионирование. Делитесь своими утилитами с сообществом или используйте их в своём монорепозитории.
Часто задаваемые вопросы
Урок «Публикация библиотеки утилит типов» бесплатный?
Да — полный текст урока «Публикация библиотеки утилит типов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.
Чему я научусь в уроке «Публикация библиотеки утилит типов»?
Упакуйте и опубликуйте пользовательские типы-утилиты в npm Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать TypeScript Academy?
Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Публикация библиотеки утилит типов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке TypeScript Academy?
Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- DeepPartial и DeepReadonly
- Утилиты Flatten и UnwrapPromise
- TupleToUnion и UnionToIntersection
- Публикация библиотеки утилит типов