Об этом инструменте
Вручную писать интерфейсы TypeScript под ответ API — рутинная работа, в которой легко ошибиться. Вставьте сюда образец JSON и мгновенно получите соответствующие интерфейсы. Вложенные объекты выносятся в отдельные именованные интерфейсы, массивы объектов объединяются так, что ключи, отсутствующие в части элементов, становятся необязательными, а значения с несколькими типами превращаются в объединения.
Работает целиком в браузере с помощью лёгкого анализатора — ваш JSON никуда не загружается. Вставьте, при желании измените имя корня и скопируйте готовые типы в проект.
Частые вопросы
Отправляются ли куда-то мои данные JSON?
Нет. Разбор и вывод типов полностью выполняются в JavaScript вашего браузера — ваш JSON никогда не покидает устройство.
Как обрабатывается массив, где объекты имеют разные поля?
Он объединяет ключи всех объектов массива в один интерфейс; любой ключ, отсутствующий хотя бы в одном объекте, помечается как необязательный знаком `?`, а не отбрасывается.
Что происходит с массивом смешанных типов, например чисел и строк?
Он создаёт объединённый тип массива вроде `(string | number)[]`, так что форма по-прежнему отражает каждое значение, реально встреченное в образце.
Можно ли генерировать псевдонимы типов (type) вместо интерфейсов?
Да, включите 'as type', чтобы каждый сгенерированный `interface Name {}` превратился в `type Name = {}` — полезно, если в вашей кодовой базе принято использовать псевдонимы типов.
Что произойдёт, если я вставлю невалидный JSON?
Инструмент покажет сообщение об ошибке с точной строкой и столбцом проблемы и позволит сразу перейти к ней, вместо общего сообщения 'invalid JSON'.
Обрабатывает ли он вложенные объекты и массивы, а не только плоский JSON?
Да. Вложенный объект превращается в собственный именованный интерфейс, имя берётся из родительского ключа (например, `profile: {...}` даёт интерфейс `Profile`), а имена массивов переводятся в единственное число (`roles` → `Role[]`). Массив объектов создаёт один интерфейс, общий для всех элементов, с `?` на полях, которые есть не у всех — а не отдельный интерфейс для каждого элемента.