0Pricing
TypeScript Academy · Урок

Публикация библиотеки утилит типов

Упакуйте и опубликуйте пользовательские типы-утилиты в 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 — локальная установка не требуется.

Все уроки этого курса

  1. DeepPartial и DeepReadonly
  2. Утилиты Flatten и UnwrapPromise
  3. TupleToUnion и UnionToIntersection
  4. Публикация библиотеки утилит типов
← Назад к TypeScript Academy