Перейти к содержанию
100% локально

TypeScript тип в JSON Schema

Преобразуйте интерфейс или псевдоним типа TypeScript в JSON Schema.

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

TypeScript тип в JSON Schema

Вставьте интерфейс TypeScript или псевдоним типа — этот инструмент создаст эквивалентный JSON Schema для валидации данных API, конфигурационных файлов и любых других JSON-структур, соответствующих вашим типам. Предназначен для разработчиков, которые описывают формат данных на TypeScript и хотят получить schema без написания его с нуля или настройки отдельного build-шага.

Выбирайте между JSON Schema draft-07 и новым диалектом 2020-12 — валидаторы и инструменты по-прежнему различаются в поддержке версий. Строковые объединения вроде 'active' | 'inactive' могут быть отрендерены как enum или как anyOf с const-значениями. Вы можете требовать отклонения неизвестных свойств объектов, преобразовывать doc-комментарии в поля description или выносить именованные интерфейсы в блок $defs (или definitions) на которые ссылаются через $ref вместо инлайн-вставки везде.

Массивы, кортежи, типы Record и Map, объединения с null — всё обрабатывается так, как TypeScript их использует. Конструкции без эквивалента в JSON Schema, такие как методы, типы функций или неразрешённые параметры generics, конвертируются максимально permissively и выводятся предупреждениями под результатом, чтобы ничего не сломалось незаметно.

Всё работает локально в браузере — ваши типы и сгенерированный schema никогда не отправляются никуда. Копируйте результат, скачивайте как .txt или передавайте прямо в другой инструмент.

FAQ

Какие части TypeScript можно конвертировать?
Интерфейсы, псевдонимы типов, вложенные объектные литералы, массивы, кортежи, Record/Map/Set, Date, Partial/Required/Pick/Omit и объединения, включая строковые объединения и null. Конструкции без эквивалента в JSON Schema, такие как методы и типы функций, пропускаются и выводятся как предупреждения.
В чём разница между draft-07 и 2020-12?
Оба — это диалекты JSON Schema. 2020-12 — это текущая версия, использует $defs и prefixItems для кортежей, а draft-07 использует definitions и массив items. Выбирайте то, что ожидает ваш валидатор.
Что происходит со свойствами, отмеченными '?'?
Они исключаются из массива required в schema, поэтому сгенерированная schema совпадает с представлением TypeScript о том, какие поля опциональны.
Почему некоторые поля становятся пустой schema {}?
Это происходит для конструкций, которые JSON Schema не может выразить, таких как параметр generic или тип, который инструмент не смог разрешить. Под результатом добавляется предупреждение с объяснением, какое именно поле и почему.
Мой код TypeScript отправляется куда-то?
Нет. Конвертирование происходит полностью в браузере — ваши типы и сгенерированная schema никогда не покидают ваше устройство.