ИНСТР-JSONTSinterface | typeВложенность · camelCaseревизия 2026-05-07

JSON → TypeScript

Генерация TypeScript interface или type из JSON-объекта. Авто-определение типов, вложенные интерфейсы, camelCase, опциональные поля.

⏱ работает в браузере · без регистрации
Инструмент · ИНСТР-JSONTS|real-time
calcal.ru / json-v-typescript-types
Загрузка инструмента…
2
Стиля (interface / type)
auto
Вложенные интерфейсы
camelCase
Конвертация ключей
0
Запросов к серверу

Что это и зачем

TypeScript — JavaScript с системой типов. Главное преимущество — компилятор ловит ошибки до запуска кода: пустые ссылки на свойства, неправильные типы аргументов, опечатки в именах полей. Когда вы получаете JSON от внешнего API, у него нет типов — TypeScript видит unknown или any, компилятор не помогает.

Этот генератор смотрит на пример JSON ответа и автоматически создаёт TypeScript interface (или type), описывающий его структуру. Тип сохраняете в types/api.ts, импортируете и используете при fetch — компилятор валидирует код.

Опции генератора

  • Имя интерфейса. Для корневого интерфейса — обычно Response, User, Order и т.д. Вложенные генерируются автоматически из имён ключей (с заглавной буквы).
  • type vs interface. Без разницы для простых объектов. interface поддерживает declaration merging (полезно для модулей). type позволяет union, intersection, mapped types.
  • camelCase. Преобразует last_loginlastLogin. Полезно если ваш код придерживается JavaScript-конвенций. ⚠ Но это уже не точное отражение API — нужен runtime-маппинг.
  • Опциональные поля. Если значение в примере null, поле помечается ?:. Это семантически означает «может отсутствовать». Полезно для API с переменной структурой ответа.
Almost all features of an interface are available in type, the key distinction is that a type cannot be re-opened to add new properties vs an interface which is always extendable.TypeScript Handbook — Type Aliases vs Interfaces

Что дальше — Zod, OpenAPI

Этот генератор хорош для быстрого старта или одноразовой задачи. Для production есть лучшие подходы:

  • Zod. Самая популярная runtime-валидация с автоматическим выводом типов. Один источник правды: схема описывает и валидацию (что приходит с сервера), и тип (что использовать в коде). Изменился API — Zod ругается на runtime, не на compile.
  • io-ts. Похоже на Zod, но functional programming style (как fp-ts). Сложнее, но мощнее.
  • OpenAPI / Swagger. Если у вашего API есть OpenAPI-спека — используйте openapi-typescript-codegen или orval для автогенерации типов и клиента.
  • GraphQL. graphql-codegen берёт схему GraphQL и генерирует типы для каждой query / mutation. Лучшее решение если есть GraphQL.
  • tRPC. End-to-end типизация TypeScript: backend и frontend разделяют типы напрямую. Не нужны генерации, но требует TS на backend.

Подводные камни

  • JSON может врать. API мог вернуть number, в следующий раз — строку. Генератор учится только по одному примеру.
  • Числа JSON. Все числа в JSON — number в JavaScript. Если API возвращает большой ID (Twitter snowflake), он может потерять precision. Используйте string для ID.
  • Даты. JSON не имеет типа Date. Даты приходят как ISO 8601 строки. В коде придётся new Date(response.created_at).
  • nullable vs optional. null и undefined — разные. foo: string | null = поле есть, может быть null. foo?: string = поле может отсутствовать. Иногда нужно оба: foo?: string | null.
ИСТОЧНИКИ
  1. TypeScript Handbook — Object Types. Microsoft. typescriptlang.org/docs/handbook/2/objects.html. 2024.
  2. Zod — TypeScript-first schema validation. Colin McDonnell. zod.dev. 2024.
  3. quicktype — Generate types from JSON. David Siegel. quicktype.io. 2024.
ЧАСТЫЕ ВОПРОСЫ

Часто задаваемые вопросы

TypeScript обеспечивает type safety — компилятор ругается, если вы пытаетесь обратиться к несуществующему полю или используете неправильный тип. Когда вы fetch-ите JSON с API, у него нет типов — TypeScript видит unknown / any. Генератор автоматически создаёт интерфейс на основе примера ответа — теперь компилятор знает структуру и подсвечивает ошибки.
В большинстве случаев — без разницы. interface — традиционный (поддерживает declaration merging, удобен для классов). type — современный (поддерживает union, intersection, mapped types). Команды решают сами. Рекомендация TypeScript Handbook: interface для публичных API, type — для внутренних. Большинство кодовых баз используют interface для объектов и type для всего остального.
Многие API возвращают snake_case ключи (last_login, user_id) — это PHP-стиль / Python convention. JavaScript / TypeScript convention — camelCase (lastLogin, userId). С опцией camelCase генератор переименовывает ключи интерфейса. Это работает только если у вас в коде маппинг (например, axios + response.data.last_login as lastLogin) или если используете library типа camelcase-keys на этапе fetch.
Если поле в примере = null, генератор не знает реальный тип. Опции: (1) пометить как опциональное (?:), что эквивалентно "может быть undefined" — хорошо для API ответов с переменной структурой. (2) использовать union type | null. (3) дать другой пример с реальным значением. Лучшая практика — генерировать из 5-10 разных ответов, чтобы выловить все варианты null.
Если массив пустой [] — unknown[] (или any[] если nullable disabled). Если содержит однотипные значения [1, 2, 3] — number[]. Если массив объектов — генератор сливает все объекты в один тип, создаёт interface для элемента, выводит ElementType[]. Если массив смешанный [1, "two", true] — number | string | boolean[] (union type).
Каждый вложенный объект становится отдельным interface. Например, { user: { profile: { ... } } } генерирует Root, User, Profile. Имена интерфейсов выводятся из ключей с заглавной буквы. Если объект встречается несколько раз с разной структурой — поля сливаются (даёт минимально достаточный тип).
Да, генератор сольёт все варианты. Например, [{a: 1}, {a: 2, b: "x"}] даст { a: number; b?: string }. Если хотите union types ({a: 1} | {a: 2, b: "x"}) — нужны discriminated unions через type, не interface. Это сложнее автоматизировать. Для production — используйте библиотеки типа quicktype, json-schema-to-typescript.
Зависит от задачи. (1) Этот генератор — для одноразовой генерации типов из примера. Быстро, но статично — если API изменится, нужно перегенерировать. (2) Zod / io-ts / typebox — runtime валидация + auto-derived TS типы. Безопаснее (отлавливает изменения API), но сложнее. (3) OpenAPI / GraphQL → автогенерация — лучше всего, но требует контроля над API. Используйте прогрессивно: сначала наш генератор, при росте — Zod.
Лиана Арифметова
АВТОРverifiedред. calcal.ru

Лиана Арифметова

Создатель и главный редактор

Миссия: демократизировать сложные расчёты. Превратить страх перед числами в ясность и контроль. Девиз: «Любая повторяющаяся задача заслуживает своего калькулятора».

Mathematical Engineering · МФТИ · редактирует каталог с 2012 года

Был ли этот калькулятор полезен?

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ

Инструмент справочный — не заменяет эксперта

Только для информационных целей. Все расчёты, результаты и данные, предоставляемые инструментом, носят исключительно ознакомительный и справочный характер. Они не являются профессиональной консультацией — медицинской, юридической, финансовой, инженерной или иной.

Точность результатов. Калькулятор основан на общепринятых формулах и методиках, однако фактические результаты могут отличаться в зависимости от индивидуальных условий, исходных данных и применяемых стандартов. Мы не гарантируем полноту, точность или актуальность приведённых расчётов.

Профессиональные решения — медицинские, финансовые, инженерные — должны приниматься только после консультации с квалифицированным специалистом. Не используйте автоматический расчёт как единственное основание для важных решений.

Ограничение ответственности. Авторы и разработчики сервиса не несут ответственности за прямой или косвенный ущерб, возникший из-за использования данных расчётов. Пользователь принимает на себя всю ответственность за интерпретацию результатов.

СМЕЖНЫЕ ИНСТРУМЕНТЫ

Похожие калькуляторы

15

Cron расшифровщик

Расшифровка cron-выражений на русском (0 9 * * 1-5 → "будни в 9:00") + следующие 5 запусков.

/cron-rasshifrovka-na-russkom

Объединить PDF онлайн — без загрузки на сервер

Склейка PDF в браузере через pdf-lib. До 20 файлов, до 50 МБ каждый. Локально, без отправки на сервер (152-ФЗ).

/obyedinit-pdf-onlajn-besplatno

Сжать PDF онлайн — уменьшить размер локально

Сжатие PDF в браузере без потери качества. 3 уровня (object streams, удаление метаданных). До 50 МБ. Через pdf-lib, локально.

/szhat-pdf-onlajn-umenshit-razmer

Разделить PDF на страницы — извлечь нужные онлайн

Разделение PDF на страницы локально: каждая страница отдельным файлом, диапазон или группами. Через pdf-lib, без отправки на сервер.

/razdelit-pdf-na-stranicy-onlajn

JPG в PDF — конвертер с объединением

Конвертация JPG/PNG в PDF в браузере: до 30 картинок в один документ. Форматы A4/A3/Letter или подгонка под изображение.

/jpg-v-pdf-konverter

Повернуть страницы PDF онлайн

Поворот всех или указанных страниц PDF на 90/180/270° за миллисекунды. Lossless. Через pdf-lib, без отправки на сервер.

/povernut-pdf-stranitsy-onlajn

Водяной знак на PDF онлайн (кириллица)

Нанесение текстового знака («КОНФИДЕНЦИАЛЬНО», «ЧЕРНОВИК») на все страницы PDF. Поддержка русского текста через Canvas. 4 положения, регулировка прозрачности.

/dobavit-vodyanoj-znak-na-pdf

Нумерация страниц PDF онлайн

Проставьте номера страниц PDF в браузере: 4 формата, 6 положений, пропуск титульной, кастомный старт. Поддержка кириллицы. Через pdf-lib + Canvas.

/numerovat-stranitsy-pdf-onlajn

PDF в JPG / PNG — конвертер страниц

Рендеринг каждой страницы PDF в картинку через pdfjs-dist (Mozilla). 4 уровня качества: 96 / 150 / 300 DPI и lossless PNG. До 50 МБ.

/pdf-v-jpg-konverter-onlajn

Извлечь текст из PDF онлайн

Извлечение текста из PDF в браузере через pdfjs-dist (Mozilla). Plain text, с разделителями страниц или JSON. Файлы не уходят на сервер.

/extract-text-iz-pdf-onlajn

Сжать JPG до 100 КБ для документов

Сжатие JPG до точного размера в КБ (50, 100, 200, 500, 1000) через бинарный поиск quality. Госуслуги, ЕГЭ, банки. Через browser-image-compression.

/szhat-jpg-onlajn-do-100kb

Удалить EXIF из фото — GPS и метаданные

Удаление EXIF (геолокация, модель камеры, дата) из JPEG. Сначала показывает что внутри, потом удаляет. 152-ФЗ. В браузере, без отправки.

/udalit-exif-iz-foto-online

Изменить размер фото в пикселях

Изменение размера JPG/PNG/WebP с сохранением пропорций. 6 пресетов (Full HD, HD, 1080×1080, 9:16). Через Canvas API, без сервера.

/izmenit-razmer-foto-onlajn-px-mb

WebP в JPG / PNG — конвертер онлайн

Конвертация WebP → JPG / PNG в браузере. До 30 файлов одновременно. Через Canvas API, без сервера. Поддержка Госуслуг и старых форм.

/webp-v-jpg-png-konverter

Повернуть фото — точно по градусам

Поворот картинки на любой угол (90°/произвольный) с превью. Цвет фона для уголков при произвольных углах. JPG/PNG/WebP. Через Canvas.

/povernut-foto-onlajn-besplatno