Легкое преобразование JSON в определения TypeScript — Numio
Генерирует интерфейсы TypeScript или псевдонимы типов из примера JSON, например ответа API. Вложенность, null и смешанные массивы обрабатываются, а преобразование выполняется в вашем браузере.
Создать именованные типы TypeScript для ответа API.
Converted in your browser. Null stays a value type; ? marks a field missing from some objects in an array. Empty arrays use unknown elements.
JSON
TypeScript
Когда пригодится
- Создать именованные типы TypeScript для ответа API.
- Сравнить несколько объектов в массиве, чтобы увидеть различающиеся типы и необязательные поля.
Как пользоваться
- Вставьте реальный JSON или загрузите один из примеров. Загрузка примера заменяет ваш ввод.
- Задайте имя корневого типа и выберите interface (вложенные объекты становятся отдельными типами) или type (один псевдоним типа с вложенными объектами внутри).
- Проверьте null, необязательные поля (?) и объединения string/number, затем скопируйте типы.
Ввод JSON
[{"id":1,"name":"Tokyo"},{"id":2}]Результат TypeScript (Root, interface)
export type Root = RootValueItem[];
export interface RootValueItem {
id: number;
name?: string;
}Подробности и ограничения
Проверяется каждый элемент массива. В примере name отсутствует во втором объекте, поэтому становится необязательным; поле, которое присутствует со значением null, вместо этого становится объединением с null.
Пустой массив даёт unknown[]. Смешанные массивы становятся массивами объединённого типа, а не кортежами фиксированной длины.
Типы покрывают только то, что есть в примере. Поля, которые ни разу не встречаются, форматы дат или email, диапазоны значений и связи между полями не выводятся.
Ввод должен быть стандартным JSON; сначала уберите комментарии или висячие запятые с помощью форматтера JSON. ID с ведущими нулями вводите строками.
Ввод ограничен 1 000 000 символов, примерно 64 уровнями вложенности и 50 000 значений. Типы TypeScript не проверяют данные во время выполнения.
FAQ
Что генерировать: interface или type?
Оба описывают одну и ту же форму. interface создаёт по именованному интерфейсу на каждый вложенный объект, их удобно переиспользовать; type создаёт один псевдоним типа с вложенными объектами, записанными внутри.
Может ли он сгенерировать класс TypeScript?
Нет, генерируются только интерфейсы или псевдонимы типов. Если нужна проверка во время выполнения, используйте JSON to Zod и подстройте схему под свои правила.
Чем null отличается от необязательного поля?
В {"name":null} есть name со значением null; в {} name нет вовсе. null остаётся в типе, а ? добавляется, только если в некоторых объектах того же массива поля нет.
Что даёт JSON-массив на корневом уровне?
Псевдоним типа для массива и интерфейс для его элементов, как в примере выше, где Root — это RootValueItem[].