DevToolPal
RU

JSON в TypeScript

Генерирует интерфейсы или типы TypeScript по примеру JSON: вложенные типы, необязательные поля и обработка null.

Работает локально, без загрузки на сервер

Параметры

Объявлять как
Значения null

JSON

Символов: 0 · 0 B

TypeScript

Символов: 0 · 0 B

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

Генератор JSON в TypeScript читает пример JSON, например ответ API или файл конфигурации, и пишет интерфейсы TypeScript, которые его описывают. Вместо того чтобы вручную набирать каждое поле, вставьте один настоящий ответ и получите типы, готовые для результатов fetch, состояния Redux или тестовых данных.

Генератор смотрит на каждое значение, а не только на первое. Числа становятся number, текст — string, вложенные объекты получают свои интерфейсы, а элементы массива объединяются, так что поле, которое есть лишь в некоторых элементах, помечается как необязательное, а поле, иногда равное null, типизируется как допускающее null.

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

  1. Вставьте JSON в поле ввода, загрузите файл .json или нажмите Пример.
  2. Задайте имя корневого типа и выберите стиль: interface или type, null как | null или как необязательные поля, свойства readonly и нужно ли добавлять export к каждому объявлению.
  3. Скопируйте TypeScript или скачайте его как файл .ts.

Некорректный JSON отмечается строкой и столбцом ошибки, чтобы пример можно было сразу исправить.

Пример

Этот JSON:

{ "id": 7, "name": "Ada", "tags": ["admin"], "manager": { "id": 1, "email": null } }

превращается в такие объявления:

export interface Root {
  id: number;
  name: string;
  tags: string[];
  manager: Manager;
}

export interface Manager {
  id: number;
  email: null;
}

Советы

  • Один пример показывает только то, что в нём есть. Если поле может быть строкой или null, включите оба варианта или поместите несколько примеров в массив, чтобы они объединились.
  • Имена полей, которые не являются допустимыми идентификаторами, например first-name, пишутся в кавычках, поэтому результат всегда компилируется.
  • Результат — это отправная точка. Сужайте строковые поля до объединений литералов или Date, если знаете больше, чем показывает пример.
  • Нужен Go? Конвертер JSON в Go использует тот же вывод типов и пишет структуры с тегами json.

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

› Как обрабатываются вложенные объекты?

Каждый вложенный объект становится отдельным именованным интерфейсом, названным по ключу в PascalCase, поэтому поле address даёт интерфейс Address. Объекты с полностью одинаковой структурой используют общий интерфейс, а при совпадении имён добавляется номер, например Address2.

› Как типизируются массивы?

Все элементы массива объединяются в один тип элемента. Массив объектов становится массивом интерфейса, названного по ключу в единственном числе, поэтому orders даёт Order[]. Смешанные массивы становятся объединением вроде (string | number)[], а пустые массивы — unknown[].

› Когда поле помечается как необязательное?

Когда оно отсутствует в некоторых объектах массива. Поле, которое есть везде, но иногда равно null, по умолчанию записывается как T | null. Переключите значения null в режим необязательных, чтобы убрать null и пометить поле вопросительным знаком.

› Что выбрать, interface или type?

Оба описывают одни и те же формы объектов. Интерфейсы можно расширять и объединять, и многие руководства по стилю советуют их для объектных типов. Псевдонимы type удобны, если вы собираетесь комбинировать результат с объединениями или отображёнными типами. Выбирайте то, что принято в вашем коде.

› Отправляется ли мой JSON на сервер?

Нет. Типы выводятся в браузере, поэтому можно смело вставлять настоящие ответы API.