Конвертор JSON към TypeScript

Поставете отговор от API и получете готови за употреба TypeScript интерфейси или type aliases, с изведени вложени типове, незадължителни полета и обединения с null.

Работи в браузъраБез регистрацияНищо не се качва

TypeScript

Как да използвате: JSON към TypeScript

  1. Поставете примерен JSON, например отговор от API, в лявото поле или отворете файл .json.
  2. Задайте името на основния тип (например User или ApiResponse).
  3. Изберете декларации interface или type и превключете export, readonly или всички полета като незадължителни.
  4. Изберете unknown (по-безопасно) или any за стойности, които примерът не може да разкрие, като празни масиви и null.
  5. Копирайте генерирания код или го изтеглете като файл .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 aliases с type могат да изразяват и обединения и mapped types. Много екипи използват интерфейси за API модели и типове за всичко останало; изберете това, което очаква вашата кодова база или линтер (@typescript-eslint/consistent-type-definitions).

По-добри типове от вашия пример

Типовете могат да са само толкова пълни, колкото е примерът. Поставете отговор, който включва незадължителни полета, или масив с няколко различни елемента, за да може генераторът да открие незадължителните и nullable ключовете. Стойности като дати и енумерации пристигат като обикновени низове в JSON; стеснете ги ръчно след това, например status: 'active' | 'disabled'. За валидиране по време на изпълнение комбинирайте генерираните типове със схема библиотека като Zod.

Често задавани въпроси

Качва ли се моят JSON?
Не. Типовете се генерират от JavaScript в браузъра ви. Отговорите от API с токени или лични данни никога не напускат устройството ви.
Как се откриват незадължителните свойства?
Когато обектите в един масив имат различни ключове, ключовете, които липсват поне в един обект, се маркират като незадължителни с ?. При единичен обект всеки ключ е задължителен, освен ако не отметнете Всички незадължителни.
Да използвам ли <code>unknown</code> или <code>any</code>?
unknown е по-безопасно: TypeScript ви кара да стесните стойността, преди да я използвате. any изключва проверката на типовете за тази стойност. Използвайте го само ако смятате да прецизирате типовете по-късно.
Защо ISO дата е с тип <code>string</code>?
JSON няма тип за дата, така че датите се пренасят като низове. Ако ги преобразувате с new Date() след парсване, сменете свойството на Date във вашия модел.
Може ли да обработи голям или дълбоко вложен JSON?
Да. Генерирането е линейно спрямо размера на входа и се изпълнява локално, така че отговори от няколко мегабайта се преобразуват за много по-малко от секунда.

Свързани инструменти