Перейти к содержанию

GraphQL SDL в типы TypeScript

Преобразуйте GraphQL-схему в соответствующие типы, интерфейсы и перечисления TypeScript.

Входные данные
Выходные данные

GraphQL SDL в типы TypeScript

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

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

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

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

FAQ

Обрабатывает ли она вложенные модификаторы списков и non-null, такие как [String!]!?
Да. Каждый уровень пустопустотности — сам список и его элементы — отображается независимо, поэтому [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-схема никогда не покидает ваше устройство.