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

Типы OpenAPI в TypeScript

Преобразуйте документ OpenAPI или Swagger в интерфейсы и типы TypeScript.

Входные данные
Выходные данные

Типы OpenAPI в TypeScript

Вставьте документ OpenAPI 3 или Swagger 2 — JSON или YAML — и этот инструмент генерирует соответствующие интерфейсы TypeScript для каждой схемы в components/schemas, плюс один тип на конечную точку для её пути и параметров запроса, тела запроса и ответов. Это избавляет от необходимости вручную писать типы API каждый раз, когда изменяется спецификация, и держит клиент в синхронизации с тем, что на самом деле возвращает сервер.

Опции управляют формой выходных данных. Выберите объявления interface или type, и решите, как представляются поля с null: как необязательное свойство (x?: string) или как объединение с null (x: string | null). Ссылки $ref могут либо оставаться как именованные типы, указывающие на соответствующий интерфейс, либо быть развёрнутыми встроено везде, где они используются. Отключите "Генерировать типы пути, параметров и ответов", чтобы получить только схемы компонентов, или включите объединение кодов состояния, чтобы увидеть каждый код ответа, который может вернуть конечная точка, как единый тип. Описания из спецификации становятся JSDoc-комментариями выше каждого поля, а префикс имени защищает сгенерированные типы от столкновения с вашими собственными при вставке их в большой кодовой базе.

Парсер читает стандартные конструкции OpenAPI — схемы объектов и массивов, перечисления, oneOf/anyOf/allOf, nullable, additionalProperties — и следует локальным указателям $ref внутри одного документа. Конечные точки, отмеченные как устаревшие, можно полностью пропустить, а документ, который не похож на OpenAPI (нет раздела components/schemas или paths), выдаёт понятную ошибку вместо пустого выхода.

Всё выполняется локально в вашем браузере — ваша спецификация API, которая может описывать неопубликованный продукт или внутреннюю систему, никогда не загружается никуда. Скопируйте сгенерированные типы, загрузите их как файл .txt для вставки в файл .ts или отправьте выход напрямую обратно на вход, чтобы продолжить совершенствование.

FAQ

Поддерживает ли он документы OpenAPI 3 и Swagger 2?
Да. Оба используют одну и ту же структуру paths, а определения Swagger 2 читаются так же, как components/schemas в OpenAPI 3.
Что происходит со ссылками $ref, которые указывают вне документа?
Разрешаются только локальные ссылки (начинающиеся с #/). Ссылка $ref на внешний файл сохраняется как именованный тип, но не может быть развёрнута, так как там нечего читать.
Могу ли я генерировать типы только для конечных точек, без каждой схемы компонента?
Схемы компонентов всегда генерируются при наличии, так как типы запросов и ответов обычно ссылаются на них. Отключите типы пути, чтобы пропустить всё, полученное из paths, и сохранить только схемы.
Почему циклическая ссылка схемы остаётся как именованный тип даже если "развернуть" включено?
Схема, которая ссылается сама на себя, прямо или через другую схему, не может быть встроена без бесконечного цикла, поэтому та одна ссылка возвращается к именованному типу, а остальные всё ещё развёртываются.
Где моя спецификация API загружается?
Нигде. Синтаксический анализ и генерирование типов выполняются полностью в вашем браузере — ваш документ никогда не покидает ваше устройство.