Как сгенерировать TypeScript из JSON
- Вставьте пример JSON. Чем больше элементов в его массивах, тем точнее определяются необязательные поля и union-типы.
- Задайте имя корневого типа и выберите
interfaceилиtype— сexportиreadonlyили без них. - Скопируйте код TypeScript в свой проект или скачайте его как файл
.ts.
Как типы TypeScript выводятся из JSON
| JSON | TypeScript |
|---|---|
"Ada" | string |
42, 3.14 | number |
true | boolean |
null рядом с другими значениями | объединение вроде string | null |
"address": {"city": "Paris"} | отдельный interface Address |
"users": [{"id": 1}] | User[] — имя элемента ставится в единственное число |
| ключ, которого нет в некоторых элементах массива | необязательное свойство key?: |
[1, "a"] | (string | number)[] |
[] | unknown[] |
{} | Record<string, unknown> |
Пример конвертации
JSON {"id": 1, "name": "Ada", "tags": ["admin"], "manager": null} превращается в:
export interface Root { id: number; name: string; tags: string[]; manager: null; }
Переименуйте Root во что-нибудь осмысленное, например User или ApiResponse. Вложенные объекты с одинаковой структурой — скажем, платёжный адрес и адрес доставки — используют один общий интерфейс, а ключи, которые не являются допустимыми идентификаторами, заключаются в кавычки, например "first-name": string.
Часто задаваемые вопросы
Interface или type — что выбрать?
Для описания формы объектов они ведут себя одинаково. Интерфейсы можно расширять и объединять, а псевдонимы типов (type) умеют описывать ещё и union-типы. Многие команды используют интерфейсы для объектов; придерживайтесь стиля, принятого в вашей кодовой базе.
Как определяются необязательные поля?
Объекты внутри одного массива объединяются. Ключ, которого нет в некоторых из них, становится необязательным (key?:), а ключ со значениями разных типов — union-типом.
Проверяет ли это данные во время выполнения?
Нет. Типы TypeScript исчезают при выполнении кода. Чтобы проверять входящие данные, сгенерируйте JSON Schema из того же примера с помощью нашего генератора JSON Schema и валидируйте данные по ней с помощью библиотеки для работы со схемами.
Отправляется ли мой JSON на сервер?
Нет. Типы генерируются в вашем браузере, поэтому можно спокойно вставлять приватные ответы API.