Перейти до вмісту
100% локально

Тип TypeScript у JSON Schema

Конвертуйте інтерфейс або псевдонім типу TypeScript у JSON Schema.

Введення
Вихід

Тип TypeScript у JSON Schema

Вставте інтерфейс TypeScript або псевдонім типу — цей інструмент створить еквівалентну JSON Schema для валідації API-даних, конфігураційних файлів та будь-яких інших JSON-структур, що відповідають вашим типам. Призначений для розробників, які описують структури даних на TypeScript і хочуть отримати schema без написання його з нуля або настроювання окремого build-кроку.

Вибирайте між JSON Schema draft-07 та новим діалектом 2020-12 — валідатори та інструменти досі розрізняються в підтримці версій. Рядкові об'єднання як 'active' | 'inactive' можуть бути відтворені як enum або як anyOf з const-значеннями. Ви можете вимагати відхилення невідомих властивостей об'єктів, перетворювати doc-коментарі на поля description або розділити назване інтерфейси на блок $defs (або definitions), на які посилаються через $ref замість вставлення всюди.

Масиви, кортежі, типи Record і Map, об'єднання з null — усе обробляється так, як TypeScript їх використовує. Конструкції без еквівалента в JSON Schema, як методи, типи функцій чи невирішені параметри generics, конвертуються якнайлояльніше й виводяться як попередження під результатом, щоб ніщо не поламалось непомітно.

Усе працює локально в браузері — ваші типи та згенерована schema ніколи не відправляються кудись. Копіюйте результат, завантажуйте як .txt або передавайте прямо в другий інструмент.

FAQ

Які частини TypeScript можна конвертувати?
Інтерфейси, псевдоніми типів, вкладені об'єктні літерали, масиви, кортежи, Record/Map/Set, Date, Partial/Required/Pick/Omit та об'єднання, включаючи рядкові об'єднання та null. Конструкції без еквівалента в JSON Schema, як методи та типи функцій, пропускаються й виводяться як попередження.
Яка різниця між draft-07 та 2020-12?
Обидва — це діалекти JSON Schema. 2020-12 — це поточна версія, використовує $defs і prefixItems для кортежів, а draft-07 використовує definitions і масив items. Вибирайте те, що очікує ваш валідатор.
Що відбувається з властивостями, позначеними '?'?
Вони виключаються з масиву required у schema, тому згенерована schema відповідає уявленню TypeScript про те, які поля опціональні.
Чому деякі поля стають порожньою schema {}?
Це відбувається для конструкцій, які JSON Schema не може виразити, як параметр generic або тип, який інструмент не зміг розв'язати. Під результатом додається попередження з поясненням, яке саме поле та чому.
Мій код TypeScript відправляється кудись?
Ні. Конвертування відбувається повністю в браузері — ваші типи та згенерована schema ніколи не залишають ваш пристрій.