Генератор TypeScript из JSON
Кодогенерация из JSON: TypeScript-интерфейсы (interface/type/inline) и Zod-схемы. Экспорт, readonly, optional для null, Date для ISO-строк.
Пустой ввод: вставьте 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
- TypeScript-интерфейсы из JSON-ответа APIОтвет API с пользователем, заказами и nullable-полем подставлен в поле ввода: генератор строит именованные интерфейсы по пути ключей (RootUser, RootOrders), ISO-даты — в Date.
- TypeScript из Kubernetes Pod (JSON)Манифест Pod в JSON в поле ввода: интерфейсы для metadata, spec и контейнеров, включая вложенные ресурсы. Kubernetes-манифест обычно приходит в YAML — сначала превратите его в JSON на /yaml/.
- Zod-схема из JSONJSON задачи с nullable-полем в режиме Zod: на выходе — z.object с типами полей, null помечается .optional(). Код предполагает, что z уже импортирован из zod.
Что это и как пользоваться
Генератор строит код по образцу 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() }))