UTILS.
100% w przeglądarce
📘

JSON Schema na TypeScript

Skompiluj JSON Schema (draft-07 lub 2020-12) do interfejsów i aliasów typów TypeScript, obsługując required, enumy, $ref, tablice i kombinatory.

wynik

O tym narzędziu

Narzędzie JSON Schema na TypeScript kompiluje dokument JSON Schema do interfejsów i aliasów typów TypeScript, robiąc to, co robi popularna biblioteka json-schema-to-typescript, bez instalowania łańcucha narzędzi. W przeciwieństwie do konwerterów przykładów JSON, to narzędzie czyta rzeczywisty schemat: przechodzi przez obiekt schematu i zamienia type:'object' w interfejs, w którym klucze wymienione w required są nieopcjonalne, a reszta jest oznaczona ?.

Wszystko jest parsowane i generowane lokalnie w Twojej przeglądarce za pomocą JSON.parse i czystego JavaScriptu, więc Twój schemat nigdy nie opuszcza strony. Schematy łańcuchów z enum stają się unią literałów łańcuchowych; zwykły string, number/integer, boolean i null mapują się na swoje odpowiedniki TypeScript; tablice stają się T[] (krotka, gdy items jest tablicą). Kombinatory są obsługiwane — allOf staje się przecięciem (A & B), a anyOf / oneOf stają się uniami (A | B) — a nullable type:[T,'null'] staje się T | null.

Referencje są rozwiązywane po nazwie: $ref wskazujący na #/definitions/X lub #/$defs/X emituje nazwaną referencję typu, a każda definicja jest generowana jako własny export interface lub export type. additionalProperties dodaje sygnaturę indeksu [key: string]: T. Nazwa typu głównego przechodzi na title lub $id schematu. Przełącz wyjście interface-vs-type oraz to, czy łańcuchy description schematu stają się komentarzami JSDoc /** */. Skopiuj wynik lub pobierz plik .ts.

Najczęściej zadawane pytania

Które funkcje JSON Schema są obsługiwane?
object z properties i required, enumy łańcuchowe jako unie literałów, number/integer/boolean/null, tablice (w tym krotki), kombinatory allOf/anyOf/oneOf, $ref do definitions lub $defs, additionalProperties jako sygnatura indeksu oraz nullable tablice typów jak ["string","null"].
Jak obsługiwane są $ref i definitions?
$ref taki jak #/definitions/Address (lub #/$defs/Address) staje się referencją do nazwanego typu Address, a każdy wpis w definitions lub $defs jest emitowany jako własny export interface lub export type, więc referencje rozwiązują się w wyjściu.
Co nadaje nazwę typowi głównemu?
Pole nazwy głównej, jeśli je ustawisz, w przeciwnym razie title schematu, w przeciwnym razie ostatni segment jego $id, w przeciwnym razie Root. Nazwy definicji pochodzą z ich klucza w definitions lub $defs, przekonwertowanego na PascalCase.
Czy mogę zachować opisy schematu?
Tak. Przy włączonym JSDoc (domyślnie) dowolny łańcuch description w schemacie lub właściwości jest emitowany jako komentarz /** ... */ nad odpowiadającym typem lub polem, zachowując dokumentację w wygenerowanym TypeScript.

Więcej narzędzi