JSON → типи TypeScript
Миттєво виводьте інтерфейси TypeScript зі зразка JSON
Про цей інструмент
Вставте зразок JSON — відповідь API, файл конфігурації — і отримайте виведений із нього інтерфейс TypeScript: вкладені об’єкти стають вкладеними типами, масиви отримують типи елементів (з об’єднаннями для змішаного вмісту), а ключі, що не є коректними ідентифікаторами, беруться в лапки як належить.
Згенеровані типи — відправна точка, а не контракт: виведення бачить один зразок, тож поле, яке у вашому прикладі випадково було null, отримає тип null, а необов’язкові поля, яких там не було, йому просто невідомі. Вивід навмисне простий — без декораторів, без валідації під час виконання — тож його можна вставити будь-куди й доопрацювати.
Для полів, що різняться від запиту до запиту, пропустіть другий зразок і об’єднайте вручну, або переходьте на інструменти зі схемою наперед (OpenAPI, zod), щойно форма стабілізується. Для щоденного «мені просто потрібен тип для цієї відповіді» одного вставляння досить.
Часті запитання
- Чому моє nullable-поле отримало тип просто null?
- Виведення бачить лише той зразок, який ви вставили. Якщо поле там було null, то null — усе, що воно може знати. Після генерації змініть його на string | null (чи який там справжній тип) або вставте зразок, де поле заповнене.
- Як обробляються необов’язкові поля?
- Ніяк не виявляються — один зразок не відрізнить «є завжди» від «є цього разу». Поля, відсутні у зразку, відсутні й у типі. Позначайте поля необов’язковими (name?:) вручну там, де знаєте, що API їх пропускає.
- Що дають масиви зі змішаними типами?
- Об’єднання: [1, "a"] виводиться як (number | string)[]. Порожні масиви виводяться як unknown[], бо немає елемента для огляду — замініть на справжній тип елемента, коли він вам відомий.
- Використовувати виведені типи чи бібліотеку схем на кшталт zod?
- Виведені інтерфейси існують лише під час компіляції — вони нічого не перевіряють у рантаймі. Для внутрішніх інструментів і швидкої типізації вони чудові; для недовіреного введення в рантаймі опишіть схему zod/valibot і виведіть статичний тип уже з неї.