Przejdź do treści
100% lokalnie

GraphQL SDL do typów TypeScript

Konwertuj schemat GraphQL na odpowiadające typy TypeScript, interfejsy i enumeracje.

Wejście
Wynik

GraphQL SDL do typów TypeScript

Wklej dokument GraphQL SDL — deklaracje typów, wejść, interfejsów i enumeracji, które opisują GraphQL API — a to narzędzie wygeneruje pasujące typy TypeScript. Zespoły backendowe budujące serwer GraphQL lub zespoły frontendowe bez zainstalowanego narzędzia codegen uzyskają typizowane kształty dla każdego obiektu, wejścia i interfejsu ze schematu w jednym przejściu bez konfigurowania kroku kompilacji tylko po to, aby zobaczyć, jak wyglądają typy.

Mapowanie skalarów jest zgodne ze specyfikacją GraphQL domyślnie: ID i String stają się string, Int i Float stają się number, Boolean pozostaje boolean, a każdy niestandardowy skalar — DateTime, JSON, Upload — wraca do typu, który wybierzesz. Pola nullable mogą być renderowane jako właściwość opcjonalna (field?: Type) lub jako jawna unia z null (field: Type | null), a ten sam wybór kształtu dotyczy całych deklaracji: wybierz aliasy typów TypeScript lub interfejsy, gdzie implements zmienia się na extends dla wybranych interfejsów. Enumeracje generują albo unię ciągów, albo rzeczywisty TypeScript enum. Przedrostek lub sufiks nazwy zapobiegają kolizjom wygenerowanych nazw z ręcznie napisanymi, a komentarze i bloki "description" ze schematu są przenoszone jako JSDoc, a typy, których nazwa zaczyna się od podkreślenia — własne typy introspekcji GraphQL — są domyślnie pomijane.

Argumenty pól i dyrektywy są automatycznie usuwane, ponieważ typy TypeScript opisują kształt, a nie resolvery: "field(id: ID!): User @deprecated" staje się zwykłym polem. Zagnieżdżone typy list takie jak [String!]! zachowują swoją wewnętrzną i zewnętrzną nullable niezależnie, więc lista niebędąca null'owalna stringów z nullable elementami i lista nullable stringów z elementami nie-null'owalnymi wychodzą różnie. Deklaracje można również sortować alfabetycznie zamiast podążać za oryginalną kolejnością schematu.

Wszystko działa lokalnie w Twojej przeglądarce — schema, którą wklejasz, nigdy nie jest nigdzie przesyłana. Skopiuj wygenerowane typy, pobierz je jako plik .txt lub wyślij wyjście bezpośrednio z powrotem do wejścia, aby kontynuować ulepszanie schematu.

Częste pytania

Czy obsługuje zagnieżdżone modyfikatory listy i non-null takie jak [String!]!?
Tak. Każdy poziom nullable — sama lista i jej elementy — jest mapowany niezależnie, więc [String!]! staje się string[], natomiast [String] staje się (string | null)[].
Co się stanie ze skalarem niestandardowym takim jak DateTime lub JSON?
Mapują się do typu rezerwowego ustawionego w opcji "Custom scalar type" (domyślnie unknown). Ustaw na string, Date lub jakikolwiek inny pasujący typ, a każde pole używające tego skalara je przejmie.
Czy argumenty pól i dyrektywy są zachowywane na wyjściu?
Nie. Typy TypeScript opisują jedynie kształt, więc argumenty takie jak (limit: Int) i dyrektywy takie jak @deprecated są usuwane; samo pole nadal jest konwertowane normalnie.
Czy mogę generować interfejsy zamiast aliasów typów?
Tak. Przełącz "Declaration kind" na Interfejsy, a jakakolwiek klauzula implements na typie GraphQL zostanie zmieniona na klauzulę extends na interfejsie TypeScript.
Czy mój schemat jest przesyłany gdziekolwiek?
Nie. Konwersja odbywa się całkowicie w Twojej przeglądarce — Twój schemat GraphQL nigdy nie opuszcza Twojego urządzenia.