# openapi-typesafe — типобезопасные OpenAPI-клиенты, готовые к TypeScript 7

Поддерживаемая замена openapi-typescript и openapi-fetch один в один: их автор перестал их поддерживать в сентябре 2026 года. Генерирует TypeScript-типы из схемы OpenAPI 3.0, 3.1 или 3.2 и даёт полностью типизированный fetch-клиент. Генератор больше не использует API компилятора TypeScript, поэтому работает на TypeScript 5, 6 и 7. Каждый релиз проверяется на 1 820 реальных схемах: 50 960 случаев, 0 неожиданных расхождений.

- **Author:** Фёдор Чищин
- **Role:** Мейнтейнер — форк, новый генератор, проверка совместимости, релизный пайплайн
- **Period:** Ноябрь 2026 — сейчас
- **Stack:** TypeScript · Node.js · OpenAPI 3.x · Vitest · GitHub Actions · npm provenance · VitePress
- **Source:** https://fedorthinks.com/ru/work/openapi-typesafe

---

<PackageBadges npm="openapi-typesafe" />

Сгенерируйте типы и вызывайте API через типизированный клиент:

<Command>npx openapi-typesafe ./openapi.yaml -o ./src/api/schema.d.ts</Command>

## Зачем он нужен

[openapi-typescript](https://github.com/openapi-ts/openapi-typescript) и `openapi-fetch` — то,
через что множество TypeScript-команд работают со своими API: даёшь им схему OpenAPI и получаешь
типы для каждого пути, параметра и ответа. В сентябре 2026 года их автор
[перестал их поддерживать](https://github.com/openapi-ts/openapi-typescript/issues/2874).

В то же время вышел TypeScript 7. Это нативный порт компилятора, и в его пакете `typescript` нет
JavaScript API: ни `ts.factory`, ни принтера. openapi-typescript строит каждый тип через
`ts.factory`, поэтому в проекте на TypeScript 7 он либо не ставится, либо падает сразу при загрузке.

То есть у тысяч проектов зависимость одновременно осталась без поддержки и вот-вот сломается.

## Что я сделал

Сделал форк с полной историей исходного репозитория и поставил одно правило: **переезд — это
только смена имени пакета, и всё.** Те же флаги CLI, тот же Node API, тот же генерируемый код, тот
же клиент.

- **Генератор без API компилятора.** Типы строятся как своё маленькое дерево и печатаются своим
  принтером. Пакет `typescript` вообще не нужен, поэтому всё работает рядом с TypeScript 5, 6 или 7.
- **Поддержка OpenAPI 3.2**, которую оригинал отвергает.
- **Инструмент миграции** (`openapi-typesafe-migrate`), который переводит проект: импорты, скрипты
  и настройки пакетов.
- **Биндинги для TanStack Query** и общие хелперы типов — тоже замена один в один.

## Как я знаю, что он совместим

«Один в один» — это обещание, значит, его надо измерять, а не заявлять. Публичный
[отчёт о совместимости](https://openapi-typesafe.github.io/openapi-typesafe/compatibility) сравнивает
наш вывод с openapi-typescript 7.13 на **1 820 реальных документах OpenAPI**: весь каталог
APIs.guru плюс крупные — GitHub, Stripe, OpenAI, Cloudflare, Kubernetes. Каждая схема прогоняется
с 28 наборами опций, итого **50 960 случаев**.

Каждый случай проверяется в три шага: одинаковые байты, затем одинаковые типы (строгая проверка
идентичности), затем — компилируется ли. Последний прогон: **99,87% совпадают байт в байт, 100% —
одинаковые типы, 0 неожиданных расхождений**. CI каждую ночь гоняет весь корпус, и каждый релиз
ссылается на свой отчёт.

## Безопасные релизы

Генератор кода запускается на вашей машине и пишет код в ваш проект, поэтому его цепочка поставки
важна:

- минимум зависимостей;
- npm provenance и никаких долгоживущих токенов публикации;
- модель угроз, политика безопасности со сроками ответа и закрытые сообщения об уязвимостях;
- бейджи OpenSSF Scorecard и OpenSSF Best Practices.

## Сделан для кодинг-агентов

В репозитории есть **skill для агентов**: он учит Claude Code (или любого агента, который читает
skills) подключать клиент, делать типизированные вызовы, обрабатывать ошибки и переезжать с
openapi-typescript. Отдельный набор evals измеряет этот skill на 34 задачах. Сайт документации
отдаёт `llms.txt`, `llms-full.txt` и Markdown-копию каждой страницы.

Сделано через agentic engineering: код пишут кодинг-агенты, а дизайн, правило совместимости и
доказательство, что оно выполняется, — на мне.

## Статус

Релиз-кандидат: `1.0.0-rc.4` на npm. До 1.0.0 имена и вывод ещё могут меняться, дальше —
семантическое версионирование. Лицензия MIT.
