Собрать варианты в одной позиции
Поместите записи в корректный JSON-массив. Сравниваются объекты в одной структурной позиции; одинаковые названия свойств в других частях документа не превращают их автоматически в общую модель.
Генерация типов
Сравните отсутствующее поле tag и null в score в примере. Для явного контракта выберите вспомогательный режим Schema.
Разбор и генерация выполняются в этом браузере. Ввод не отправляется и не сохраняется.
Объявлений: 3 · необязательных свойств: 1
JSON в TypeScript помогает подготовить первую модель ответа API. Один успешный ответ может скрыть поля, которые иногда отсутствуют. Соберите несколько характерных записей в массив, прежде чем переносить объявления в проект.
Конвертер различает отсутствие свойства и явно переданное значение null. Результат нужно сверить с документацией API: будущие варианты, ответы с ошибками и правила предметной области нельзя восстановить по одной удачной выборке.
JSON в TypeScript анализирует все переданные элементы. Если у одного объекта нет tag, свойство становится необязательным. Если score содержит число и null, создаётся объединение. Отсутствие поля и пустое значение не подменяют друг друга.
Schema позволяет задать обязательные свойства и допустимые значения enum, которых не видно в примере. Режим нужно выбрать явно. Неподдерживаемое ограничение останавливает генерацию с указанием пути, а не пропускается при создании объявления.
Поместите записи в корректный JSON-массив. Сравниваются объекты в одной структурной позиции; одинаковые названия свойств в других частях документа не превращают их автоматически в общую модель.
Смена режима сохраняет введённый текст. Кнопка примера загружает данные для выбранного режима. В Schema обязательность задаёт required; переключатель всех необязательных полей влияет только на образцы.
Автогенерация ждёт 350 мс после изменений. Отключите её для появления кнопки генерации или нажмите Ctrl/Cmd+Enter. Любое изменение блокирует экспорт до успешного обновления. Root служит основой производных имён.
Числа и строки в одной позиции образуют объединение. Вложенные массивы тоже анализируются. Пустой массив использует сведения о типах непустых массивов в той же позиции; если элементов нет нигде, остаётся unknown[]. Кортежи фиксированной длины не создаются.
Свойство, отсутствующее в части объектов, получает ?. Явный null остаётся null или частью объединения. По одному null нельзя угадать string или number. Включите strictNullChecks в проекте, чтобы различие учитывалось при проверке типов.
Вложенные объекты получают собственные объявления с именами от родительских полей. Совпадения разрешаются стабильными числовыми суффиксами. Исходные ключи сохраняются, при необходимости в кавычках. Имя корня — ASCII-идентификатор до 64 символов, без зарезервированных слов.
Поддерживаются логические схемы, type, properties, required, одиночная схема items, логическое additionalProperties, скалярные enum/const и ограниченный anyOf. Выберите interface или type, export и отступ в два или четыре пробела. integer выражается как number.
Ориентируйтесь на правила проекта. Здесь interface применяется к объявлениям объектов. Для массива, примитивного значения или объединения в корне всё равно нужен псевдоним type, даже если выбран interface.
Отсутствующее в части записей свойство получает ?, а явный null сохраняется в типе значения. Если встречаются и число, и null, получается number | null. Переключатель необязательных полей не удаляет пустые значения.
Каждый объект в данной позиции участвует в объединении полей. Свойства, отсутствующие хотя бы в одном объекте, становятся необязательными. По одной записи нельзя узнать, какое поле может пропасть в другом ответе.
Конвертер JSON в TypeScript создаёт отдельные именованные объявления, используя имя корня и родительского поля. При совпадении добавляются числовые суффиксы. Ключи исходных данных при этом не переименовываются.
Наблюдаемые типы объединяются: например, число и строка дают number | string. null остаётся самостоятельным членом объединения. Если массив полностью пуст, тип элемента unknown; без данных инструмент не выбирает произвольную модель.
Нашли спорный результат вывода типов?
Используйте JSON в TypeScript для нескольких вариантов ответа, проверьте необязательные свойства и null, затем перенесите объявления в проект для дальнейшей проверки.