Что такое JSON в TypeScript?

JSON to TypeScript преобразует JSON-данные в TypeScript-интерфейсы и определения типов. Распознаёт строки, числа, булевы значения, массивы и вложенные объекты, помечая nullable-поля как необязательные с union-типами. Не тратьте время на ручное написание типов для API-ответов.

Когда массив содержит объекты с чуть разной формой, генератор объединяет их: ключи, которых нет в части записей, помечаются опциональными через `?`. Каждый вложенный объект получает свой именованный interface (User, UserAddress, UserAddressGeo). Смешанные массивы дают объединения вроде `(string | number)[]`. Строки в формате ISO 8601 помечаются JSDoc-комментарием, а строковые поля, которые в выборке принимают лишь небольшой набор повторяющихся значений, выводятся как объединение строковых литералов вместо обычного string. Помимо вывода TypeScript из того же ввода доступны ещё три вкладки: парная Zod-схема, тестовые данные с реалистичными значениями-заглушками и JSON Schema draft-07. Переключайтесь между interface и type-алиасом, включайте слово `export`, сортируйте ключи от A→Z и включайте camelCase, чтобы привести ключи snake_case или kebab-case к привычным для TypeScript именам.

Как использовать

  1. Шаг 1 — Вставьте JSON-объект или массив, перетащите файл .json в поле ввода, либо подтяните живой JSON по URL. Инструмент анализирует структуру и определяет TypeScript-типы для каждого поля.
  2. Шаг 2 — Настройте вывод: задайте имя корневого интерфейса, выберите между интерфейсами и псевдонимами типов, включите или выключите необязательные свойства для полей, которые могут быть null.
  3. Шаг 3 — Скопируйте вывод или скачайте его. Четыре вкладки используют одни и те же настройки: типы TypeScript, парная Zod-схема для валидации в рантайме, готовые тестовые данные для тестов и Storybook, а также JSON Schema draft-07 для OpenAPI или библиотек форм. Все вложенные объекты автоматически получают собственные именованные интерфейсы.

Когда использовать

  • Типизировать ответ API, для которого нет спецификации OpenAPI/Swagger.
  • Быстро получить типы для JSON-конфига (tsconfig.json, package.json), который читаете в скрипте.
  • За секунды поднять типизированную обёртку над ответом стороннего SDK.

Результат

Ваш API возвращает объект пользователя с вложенными адресом и настройками. Вставьте JSON-ответ, установите корневое имя «User», и получите чистые интерфейсы: User, UserAddress, UserPreferences — с правильными типами, например «string | null» для необязательных полей.

Частые вопросы

Как генератор решает, какие поля считать опциональными?
Если на входе один объект и включена опция «Помечать nullable как опциональные», поля со значением null получают `?`. Для массива объектов генератор объединяет ключи всех записей: пропавшие хотя бы в одной становятся опциональными.
А если у элементов массива разная форма?
Логика та же: ключи, которые есть во всех элементах, остаются обязательными; присутствующие только в части — становятся опциональными; значения со смешанными примитивными типами превращаются в объединения вроде `string | number`. Получается один интерфейс, описывающий весь массив.
Что выбрать: interface или type alias?
Интерфейсы удобнее расширять через declaration merging, и это стандартный выбор для форм API. Type alias лучше подходит, когда нужно сочетание с объединениями, пересечениями и mapped-типами. В рантайме разницы нет — пользуйтесь тем, что принято в кодовой базе.
Почему некоторые имена свойств в выводе заключены в кавычки?
Если ключ содержит символы, не подходящие для идентификатора TypeScript (дефис, пробел, начинается с цифры, точка), генератор оборачивает его в кавычки. Тип остаётся валидным, а доступ в коде ведётся через `obj["weird-key"]`.
Будут ли сгенерированные типы ловить изменения схемы API?
Только если перегенерировать. Типы — это снимок JSON, который вы вставили, сами они не обновляются. Обычная практика: перегенерировать при смене версии API и смотреть diff на код-ревью.

Похожие инструменты