JSON → TypeScript-types
Leid direct TypeScript-interfaces af uit een JSON-voorbeeld
Over deze tool
Plak een JSON-voorbeeld — een API-antwoord, een configuratiebestand — en krijg er een TypeScript-interface uit afgeleid: geneste objecten worden geneste typen, arrays krijgen elementtypen (met unions bij gemengde inhoud), en sleutels die geen geldige identifier zijn worden netjes tussen aanhalingstekens gezet.
Gegenereerde typen zijn een startpunt, geen contract: de inferentie ziet één voorbeeld, dus een veld dat in jouw voorbeeld toevallig null is krijgt het type null, en optionele velden die ontbraken zijn eenvoudigweg onbekend. De uitvoer is bewust kaal — geen decorators, geen runtimevalidatie — zodat je hem overal kunt plakken en verfijnen.
Voor velden die per request verschillen kun je een tweede voorbeeld erdoorheen halen en handmatig samenvoegen, of overstappen op schema-first-gereedschap (OpenAPI, zod) zodra de vorm stabiliseert. Voor het dagelijkse “ik heb gewoon even een type voor dit antwoord nodig” is één keer plakken genoeg.
Veelgestelde vragen
- Waarom krijgt mijn nullable veld alleen het type null?
- De inferentie ziet alleen het voorbeeld dat je plakte. Was het veld daar null, dan is null alles wat ze kan weten. Verander het na het genereren in string | null (of wat het echte type is) — of plak een voorbeeld waarin het veld wel gevuld is.
- Hoe worden optionele velden behandeld?
- Ze worden niet gedetecteerd — één voorbeeld kan “altijd aanwezig” niet onderscheiden van “deze keer aanwezig”. Velden die in het voorbeeld ontbreken, ontbreken in het type. Markeer velden handmatig als optioneel (naam?:) waar je weet dat de API ze weglaat.
- Wat leveren arrays met gemengde typen op?
- Een union: [1, "a"] leidt tot (number | string)[]. Lege arrays leiden tot unknown[], omdat er geen element te inspecteren valt — vervang dat door het echte elementtype zodra je het kent.
- Moet ik afgeleide typen gebruiken of een schemabibliotheek als zod?
- Afgeleide interfaces bestaan alleen tijdens compilatie — ze valideren niets tijdens runtime. Voor interne tools en snel typen zijn ze perfect; voor niet-vertrouwde invoer tijdens runtime definieer je een zod-/valibot-schema en leid je het statische type daaruit af.