Перейти до вмісту

GraphQL SDL на типи TypeScript

Перетворіть GraphQL-схему на відповідні типи, інтерфейси та enum TypeScript.

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

GraphQL SDL на типи TypeScript

Вставте документ мови визначення схеми GraphQL (SDL) — оголошення типів, вхідних даних, інтерфейсів та enum, які описують GraphQL API — і цей інструмент генерує відповідні типи TypeScript. Команди, які будують GraphQL-сервер, або фронтенд-команди, які його використовують без встановлених інструментів codegen, отримають типізовані структури для кожного об'єкта, вхідних даних та інтерфейсу в схемі за один прохід, без необхідності налаштовувати крок збірки лише для того, щоб побачити, як виглядають типи.

Відображення скалярів слідує специфікації GraphQL за замовчуванням: ID та String стають string, Int та Float стають number, Boolean залишається boolean, а будь-який користувацький скаляр — DateTime, JSON, Upload — переходить на конфігурований вами тип. Поля, що допускають null, можуть відображатися як необов'язкова властивість (field?: Type) або як явне об'єднання з null (field: Type | null), і той самий вибір форми застосовується до цілих оголошень: виберіть псевдоніми типів TypeScript або інтерфейси, причому implements перетворюється на extends при виборі інтерфейсів. Enum генерують або строкове об'єднання літералів, або реальний TypeScript enum. Префікс або суфікс імені запобігає конфліктам сгенерованих імен з написаними вручну, коментарі та блоки "description" із схеми переносяться як JSDoc, а типи, імена яких починаються з підкреслення — власні типи інтроспекції GraphQL — пропускаються за замовчуванням.

Аргументи полів і директиви видаляються автоматично, оскільки типи TypeScript описують форму, а не преобразователи: "field(id: ID!): User @deprecated" стає простим полем. Вкладені типи списків, такі як [String!]!, зберігають незалежність внутрішньої та зовнішньої допустимості null, тому список, що не допускає null, рядків, допустимих null, та список рядків, що не допускає null, виводяться по-різному. Оголошення також можуть бути відсортовані за алфавітом замість дотримання вихідного порядку схеми.

Все працює локально у вашому браузері — схема, яку ви вставляєте, ніколи не завантажується нікуди. Скопіюйте сгенеровані типи, завантажте їх як .txt-файл або відправте вихідні дані прямо назад на вхід, щоб продовжити уточнення схеми.

FAQ

Чи обробляє вона вкладені модифікатори списків та non-null, такі як [String!]!?
Так. Кожен рівень допустимості null — сам список та його елементи — відображається незалежно, тому [String!]! стає string[], а [String] стає (string | null)[].
Що відбувається з користувацькими скалярами, такими як DateTime або JSON?
Вони відображаються на резервний тип, встановлений у параметрі "Custom scalar type" (за замовчуванням unknown). Встановіть його на string, Date або будь-який інший відповідний тип, і кожне поле, яке використовує цей скаляр, це підхопить.
Чи зберігаються аргументи полів та директиви у вихідних даних?
Ні. Типи TypeScript описують лише форму, тому аргументи типу (limit: Int) та директиви типу @deprecated відкидаються; саме поле все ще перетворюється нормально.
Чи можу я генерувати інтерфейси замість псевдонімів типів?
Так. Перемкніть "Declaration kind" на Interfaces, і будь-яке речення implements для типу GraphQL стане реченням extends для інтерфейсу TypeScript.
Чи завантажується моя схема кудись?
Ні. Перетворення працює повністю у вашому браузері — ваша GraphQL-схема ніколи не залишає ваш пристрій.