tigtools

JSON to TypeScript

Вставте JSON-відповідь або файл і отримайте декларації TypeScript, які можна одразу використати у своєму коді.

Працює у вашому браузері Без реєстрації

Оголосити як

Як користуватися

  1. Вставте JSON у поле вводу, відкрийте файл .json або спробуйте приклад.
  2. Задайте назву кореневого типу, наприклад Order або ApiResponse.
  3. Оберіть декларації interface або type та чи додавати export і readonly.
  4. Скопіюйте згенерований TypeScript або завантажте його як types.ts.

Як це працює

Генератор проходить весь JSON-документ і фіксує типи значень у кожному місці. Кожен JSON-об’єкт стає окремим іменованим оголошенням. Назва утворюється з ключа властивості, записаного в PascalCase, тому «shipping_address» стає ShippingAddress. Елементи масиву отримують імена за одниною ключа: «items» дає Item, «categories» — Category, а ключі, які не схожі на множину, отримують суфікс «Item».

Усі об’єкти в межах одного масиву об’єднуються в один інтерфейс. Якщо ключ присутній лише в частині з них, він позначається як необов’язковий знаком «?». Якщо значення в різних місцях має різні типи, тип стає об’єднанням, наприклад string | number. null зберігається як окремий тип, тому поле, яке іноді буває null, стає string | null. Порожній масив стає unknown[], оскільки з нього нічого не можна вивести. Два об’єкти з однаковими властивостями й типами спільно використовують один інтерфейс, не створюючи дублікатів. Ключі, які не є допустимими ідентифікаторами, як-от «first-name», беруться в лапки.

Результат описує лише вставлений вами зразок. Поле, яке насправді може бути необов’язковим або null, буде обов’язковим і не допускатиме null, якщо цього не видно у вашому зразку, а дати надходять як звичайні рядки. Перш ніж покладатися на ці типи, звірте їх із документацією вашого API.

Приклади

Типізація відповіді API

Вставте замовлення з API вашого магазину і вкажіть кореневу назву Order. Ви отримаєте інтерфейси Order, Customer, Item і Shipping, а Item матиме note?: string, оскільки лише один із двох елементів має note.

Конфігурація лише для читання

Вставте config.json, позначте «Зробити властивості лише для читання» і вставте результат у config.d.ts, щоб компілятор виявляв випадкові зміни конфігурації.

Масив на верхньому рівні

Кінцева точка списку повертає [{…}, {…}]. Якщо вказати кореневу назву Product, результат починається з «export type Product = ProductItem[];», після чого йде інтерфейс ProductItem.

Поширені запитання

Чому поле в результаті необов’язкове?

Тому що принаймні один об’єкт у тому самому масиві не має цього ключа. Якщо ключ є в кожному об’єкті, він буде обов’язковим. Вставте кілька записів, щоб отримати точніші необов’язкові поля.

Чому дата має тип string?

JSON не має типу дати, тому дати передаються як рядки. Генератор не вгадує формати. Змініть тип самостійно, якщо ваш код перетворює їх на об’єкти Date.

Яка різниця між interface і type?

Для форм об’єктів вони працюють майже однаково. Інтерфейси можна розширювати та об’єднувати пізнішими оголошеннями; псевдоніми типів не можна повторно відкривати. Обирайте стиль, який уже використовується у вашій кодовій базі.

Чи може він генерувати валідацію під час виконання, як-от схеми Zod?

Ні. Створюються лише декларації TypeScript, які перевіряються на етапі компіляції та не валідують дані під час виконання.

Конфіденційність

Ваш JSON аналізується лише у вашому браузері. Нічого не завантажується, не зберігається та не потрапляє в аналітику.