JSON Schema naar TypeScript-definities — Numio
Compileert een JSON-schema in TypeScript-interfaces met json-schema-naar-typescript. Eigenschappen die niet onder 'vereist' staan, worden optioneel en objecten krijgen een indexhandtekening tenzij additionalProperties onwaar is.
Uw API publiceert JSON-schemabestanden en u wilt bijpassende interfaces voor de clientcode die deze gebruikt.
Wanneer gebruik je dit?
- Uw API publiceert JSON-schemabestanden en u wilt bijpassende interfaces voor de clientcode die deze gebruikt.
- U houdt configuratiebestanden gevalideerd door een schema en wilt typecontrole waar de configuratie wordt geladen.
Hoe werkt het
- Plak een JSON-schema in het paneel JSON Schema. Een "titel" stelt de interfacenaam in; zonder één heet de root MySchema.
- De conversie wordt in de browser uitgevoerd terwijl u typt; de pagina heeft geen instellingen en voegt geen bannercommentaar toe.
- Kopieer de interfaces van het TypeScript-paneel. De pagina formatteert ze met Prettier, dus ze gebruiken inspringing met twee spaties en geen puntkomma's.
JSON-schema
{
"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"]
}TypeScript-interfaces
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
}Details en beperkingen
Objecten zonder "additionalProperties": false get [k: string]: onbekend, dus extra sleutels blijven toegestaan in het type.
maxItems op een array wordt uitgebreid tot een unie van tupels, zoals bij "lijnen" in het voorbeeld.
Lokale $ref-items zoals #/definition/Tag worden afzonderlijke geëxporteerde interfaces.
De pagina voert het resultaat door Prettier uit zonder puntkomma's, waardoor ook overbodige haakjes rond vakbonden worden verwijderd, zoals "US" | "CA".
FAQ
Hoe worden nulwaarden getypt?
"type": ["geheel getal", "null"] wordt (getal | null). geheel getal en getal zijn beide toegewezen aan getal.
Hoe kom ik af van [k:string]: onbekend?
Voeg "additionalProperties": false toe aan elk objectschema; de indexhandtekening wordt dan weggelaten.
Hoe wordt de rootinterface genoemd?
Van de "titel" van het schema omgezet naar PascalCase ("Voorbeeldschema" wordt ExampleSchema). Zonder titel is de naam MySchema.
Wordt het schema naar een server verzonden?
Nee. De json-schema-naar-typescript compileerfunctie wordt uitgevoerd in de browser op deze pagina.