nicetool.dev logo

JSON в TypeScript

Вставьте ответ API или объект JSON. Типы обновляются по мере ввода.

JSON
Сгенерированный код
export interface User {
  id: number;
  name: string;
  email: string;
  score: number;
  active: boolean;
  tags: string[];
  address: Address;
  orders: Order[];
}

export interface Address {
  city: string;
  postcode: null;
}

export interface Order {
  id: number;
  total: number;
  paidAt?: string;
  coupon?: string;
}

Зачем генерировать типы из JSON?

API, конфиги и вебхуки отдают JSON, а TypeScript, Go и валидаторам во время выполнения нужна явная структура. Писать интерфейсы вручную для большого ответа долго и чревато ошибками: поле, которое иногда отсутствует, число, которое иногда null, или вложенный массив объектов легко описать неверно. Этот инструмент читает реальный пример и выводит структуру за вас. Массивы объектов объединяются: ключи, встречающиеся лишь в части элементов, становятся необязательными, ключи, иногда равные null, становятся nullable, а каждый вложенный объект получает собственное имя типа.

Возможности

  • • Интерфейсы или псевдонимы типов TypeScript с необязательными (?) полями
  • • Структуры Go с тегами json, omitempty и идиоматичными именами (ID, URL)
  • • Схемы Zod с выведенными типами TypeScript в порядке, где ссылки разрешаются
  • • Объединяет массивы объектов и распознаёт null, смешанные значения и целые числа
  • • Берёт в кавычки ключи, недопустимые как идентификаторы, например "first-name"

Ваши данные остаются у вас

Разбор и генерация кода выполняются в браузере. Ответы API с реальными данными клиентов не покидают ваш компьютер.

Без загрузки, работает офлайн.

Как пользоваться: JSON в TypeScript

  1. 1

    Вставьте пример JSON, например ответ, скопированный из вкладки Network браузера, Postman или curl. Чем больше элементов в массивах, тем точнее определяются необязательные поля.

  2. 2

    Выберите вывод: интерфейсы TypeScript, структуры Go или схемы Zod. Для TypeScript можно переключиться на псевдонимы типов.

  3. 3

    Задайте имя корневого типа, например User или OrderResponse. Вложенные объекты называются по ключам, элементы массивов в единственном числе (orders станет Order).

  4. 4

    Проверьте результат, поправьте то, что пример не мог показать (например, строку, которая на самом деле дата или enum), и скопируйте в код.

Практические примеры

Типизация ответа REST API

Вставьте JSON из GET /api/users/42 и получите интерфейс User с вложенным типом Address, готовый для fetch или axios.

Go-клиент для стороннего API

Сгенерируйте структуры с тегами json для payload вебхука Stripe или GitHub. Необязательные ключи получат omitempty, вложенные объекты станут отдельными типами.

Проверка во время выполнения с Zod

Превратите пример тела запроса в схему Zod и используйте schema.parse() в route handler Next.js, чтобы отклонять некорректные данные, а z.infer для статического типа.

Конфигурационные файлы

Вставьте JSON-конфиг и получите типизированный интерфейс, чтобы редактор подсказывал ключи и ловил опечатки.

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

Как определяются необязательные поля?+

Если корень или вложенное значение массив объектов, все элементы объединяются. Ключ, отсутствующий хотя бы в одном элементе, становится необязательным (? в TypeScript, omitempty в Go, .optional() в Zod).

Что с значениями null?+

Ключ, который в одних элементах null, а в других строка, становится string | null (nullable() в Zod, *string в Go). Ключ, который всегда null в примере, остаётся null, так как настоящий тип неизвестен.

Почему число в Go стало int64?+

Целые числа из примера становятся int64, дробные float64. Если поле смешивает оба вида, оно расширяется до float64 (number в TypeScript).

Распознаются ли даты, enum и UUID?+

Нет. В JSON нет типов даты и enum, поэтому они выводятся как string. Уточните их вручную, например через z.string().datetime() или объединение литералов.