Konwerter JSON Schema na definicje TypeScript — Numio
Kompiluje JSON Schema do interfejsów TypeScript przy użyciu json-schema-to-typescript. Właściwości niewymienione w "required" stają się opcjonalne, a obiekty otrzymują sygnaturę indeksową, chyba że additionalProperties ma wartość false.
Twój API publikuje pliki schematu JSON i chcesz dopasować interfejsy do kodu klienta, który je wykorzystuje.
Kiedy go używać
- Twój API publikuje pliki schematu JSON i chcesz dopasować interfejsy do kodu klienta, który je wykorzystuje.
- Sprawdzasz poprawność plików konfiguracyjnych według schematu i chcesz sprawdzić typ, gdzie ładowana jest konfiguracja.
Jak używać
- Wklej JSON Schema do panelu schematu. "title" ustawia nazwę interfejsu; bez niego główny typ nosi nazwę MySchema.
- Konwersja przebiega w przeglądarce podczas pisania; strona nie ma żadnych ustawień i nie dodaje komentarza do banera.
- Skopiuj interfejsy z panelu TypeScript. Strona formatuje je w formacie Prettier, więc używają wcięcia z dwiema spacjami i nie używają średników.
Schemat JSON
{
"title": "Address",
"type": "object",
"properties": {
"street": { "type": "string", "minLength": 1 },
"zip": { "type": "string", "pattern": "^[0-9]{5}$" },
"country": { "enum": ["US", "CA"], "default": "US" },
"unit": { "type": ["integer", "null"] },
"lines": { "type": "array", "items": { "type": "string" }, "maxItems": 3 },
"geo": { "type": "object", "required": ["lat", "lng"],
"properties": { "lat": { "type": "number" }, "lng": { "type": "number" } } }
},
"required": ["street", "zip"]
}Interfejsy TypeScript
export interface Address {
street: string
zip: string
country?: "US" | "CA"
unit?: number | null
lines?: [] | [string] | [string, string] | [string, string, string]
geo?: {
lat: number
lng: number
[k: string]: unknown
}
[k: string]: unknown
}Szczegóły i ograniczenia
Obiekty bez „additionalProperties”: false get [k: string]: nieznane, więc dodatkowe klucze pozostają dozwolone w typie.
maxItems tablicy jest rozwijane do unii krotek, jak w przypadku "lines" w przykładzie.
Lokalne wpisy $ref, takie jak #/definitions/Tag, stają się oddzielnymi eksportowanymi interfejsami.
Strona wyświetla wynik poprzez Prettier bez średników, co powoduje również usunięcie zbędnych nawiasów wokół związków, takich jak „US” | „CA”.
FAQ
Jak wpisuje się wartości null?
"type": ["integer", "null"] staje się (number | null). Zarówno integer, jak i number są mapowane na number.
Jak pozbyć się [k: string]: nieznany?
Dodaj „additionalProperties”: false do każdego schematu obiektu; podpis indeksu jest wówczas pomijany.
Jak nazywa się interfejs główny?
Z "title" schematu przekształconego do PascalCase ("Example Schema" staje się ExampleSchema). Bez title nazwa to MySchema.
Czy schemat jest wysyłany na serwer?
Nie. Na tej stronie w przeglądarce działa funkcja kompilacji json-schema-to-Typescript.