Генератор TypeScript из JSON

Кодогенерация из JSON: TypeScript-интерфейсы (interface/type/inline) и Zod-схемы. Экспорт, readonly, optional для null, Date для ISO-строк.

Режим
Стиль TypeScript
Опции
Введите JSON — типы появятся сразу. Или начните с готового примера ниже.

Что генератор делает с документом

Вложенные объекты становятся именованными объявлениями по пути ключей (RootUser, RootUserAddress), элементы массива — от единственного числа ключа (users → RootUser). Массивы смешанных типов дают юнион ((string | number)[]), ключ-не-идентификатор выводится в кавычках ('foo-bar'). Пустой объект — Record<string, unknown>, пустой массив — unknown[]: выдумывать элементную типизацию неоткуда. «Инлайн» убирает именованные объявления, оставляя один type-литерал.

optional делает nullable-свойства опциональными, Date — ISO-строки типом Date (z.coerce.date() в Zod). В режиме Zod стиль и readonly не применяются: там всё инлайн z.object, а nullable и optional выражаются модификаторами. Код Zod предполагает, что z уже импортирован из zod.

Kubernetes-манифест обычно приходит в YAML — сначала превратите его в JSON на /yaml/.

Последние генерации

В истории — режим, стиль и счётчики: сам документ не сохраняется. Настройки восстанавливаются кнопкой «В закладки».

Готовые примеры

Найдено: 3 из 3

Что это и как пользоваться

Генератор строит код по образцу JSON в двух режимах: TypeScript и Zod. В режиме TypeScript доступны три стиля — interface, type и inline, — а в режиме Zod получается схема z.object, которую можно использовать для проверки данных в рантайме.

Имена типов образуются из пути: корень называется Root, а вложенный объект users.address становится RootUserAddress. Ключи с дефисом или пробелом попадают в кавычки, массив объектов превращается в тип элемента с [], а пустой объект — в Record<string, unknown>.

Стиль inline печатает вложенные объекты прямо в объявлении, interface и type выносят их в отдельные объявления: у глубокой структуры inline даёт одну большую конструкцию, а interface — десяток мелких типов.

Четыре флажка меняют вывод: export добавляет ключевое слово, readonly делает свойства только для чтения, optional помечает nullable-свойства необязательными, Date распознаёт ISO-строки и превращает их в Date (в Zod — в z.coerce.date()).

В режиме Zod readonly не применяется: там всё строится инлайн через z.object, и модификатор просто некуда поставить.

Когда пригодится

  • Получить типы под ответ API, не набирая поля руками.
  • Сгенерировать Zod-схему, чтобы проверять входящие данные до использования.
  • Показать коллегам форму данных в виде интерфейса вместо чтения JSON глазами.
  • Пересоздать типы после того, как внешний сервис поменял формат ответа.
  • Сгенерировать тип для фикстуры теста, чтобы проверять ответ мока по той же форме, что и настоящий API.
  • Сравнить два стиля вывода: interface для чтения глазами, inline для быстрого прототипа.

Чего инструмент не делает

  • Типы выводятся из одного образца: если поле бывает и строкой, и числом, в другой выборке тип окажется уже реального.
  • Иерархия не выносится: общие части разных объектов не выделяются в отдельные интерфейсы автоматически.
  • Схема на сервере не отслеживается: после обновления API типы нужно перегенерировать вручную.
  • Zod-схема проверяет форму, но не бизнес-правила: диапазоны, форматы и обязательность полей придётся дописывать.

Примеры

Вход
                    {"id":1,"name":"Мария"}
                  
Выход
                    interface Root { id: number; name: string }
                  
Вход
                    [{"id":1},{"id":2}] в режиме Zod
                  
Выход
                    z.array(z.object({ id: z.number() }))