Конвертер JSON у TypeScript
Вставте відповідь API й отримайте готові інтерфейси або псевдоніми типів TypeScript із виведеними вкладеними типами, необов'язковими полями й об'єднаннями з null.
Працює в браузеріБез реєстраціїНічого не завантажується
Як користуватися: JSON у TypeScript
- Вставте приклад JSON, наприклад відповідь API, у ліве поле або відкрийте файл
.json. - Задайте ім'я кореневого типу (наприклад,
UserабоApiResponse). - Виберіть оголошення
interfaceабоtypeй увімкнітьexport,readonlyчи всі необов'язкові поля. - Виберіть
unknown(безпечніше) абоanyдля значень, тип яких із прикладу не визначити, як-от порожні масиви й null. - Скопіюйте згенерований код або завантажте його як файл
.ts.
Як виводяться типи
- Примітиви: рядки, числа й логічні значення відображаються в
string,numberіboolean. - Вкладені об'єкти стають окремими іменованими інтерфейсами в PascalCase, тож
billing_addressперетворюється наBillingAddress. - Масиви об'єктів об'єднуються в один тип елемента з іменем в однині:
usersдаєUser[]. Ключ, якого немає в частині елементів, стає необов'язковим (key?:). - Значення null об'єднуються з іншими значеннями цього ключа:
string | null. Ключ, що завждиnull, отримує типunknownабоany. - Змішані масиви стають масивами об'єднань, наприклад
(number | string)[]. - Однакові структури оголошуються один раз і перевикористовуються, а різні структури з однаковим іменем отримують числовий суфікс.
- Ключі, що не є коректними ідентифікаторами, наприклад
"first-name"або"2fa", беруться в лапки.
interface чи type
Для простих структур об'єктів вони майже взаємозамінні. Оголошення interface можна розширювати й об'єднувати, і вони дають трохи зрозуміліші помилки компілятора. Псевдоніми type також уміють виражати об'єднання й mapped types. Багато команд використовують інтерфейси для моделей API, а типи — для всього іншого; вибирайте те, чого очікує ваша кодова база чи лінтер (@typescript-eslint/consistent-type-definitions).
Як отримати точніші типи
Типи можуть бути повними рівно настільки, наскільки повний приклад. Вставте відповідь із необов'язковими полями або масив із кількома різними елементами, щоб генератор зміг визначити необов'язкові й nullable-ключі. Дати й переліки надходять у JSON як звичайні рядки; звужуйте їх вручну, наприклад status: 'active' | 'disabled'. Для валідації під час виконання використовуйте згенеровані типи разом із бібліотекою схем на кшталт Zod.
Поширені запитання
Чи завантажується мій JSON?
Як визначаються необов'язкові властивості?
?. Для одиночного об'єкта всі ключі обов'язкові, якщо не позначено Усі необов'язкові.Що використовувати: <code>unknown</code> чи <code>any</code>?
unknown безпечніший: TypeScript змусить звузити тип перед використанням значення. any вимикає перевірку типів для цього значення. Використовуйте його, лише якщо плануєте уточнити типи пізніше.Чому ISO-дата отримує тип <code>string</code>?
new Date() після розбору, змініть тип властивості на Date у своїй моделі.