Sechs konkrete Fälle der Typableitung
Die Tabelle fasst die tatsächlichen Ergebnisse der vorhandenen Ableitung zusammen. Die vollständigen Interface- und Typ-Ausgaben sind als JSON-Datensatz verfügbar. Die Eingaben sind Testdaten, keine vollständigen API-Verträge.
| JSON-Eingabe | Beobachtetes Ergebnis | Folgerung |
|---|---|---|
| {"id":42,"owner":{"name":"Ada"}} | Root und Owner | Verschachtelte Objekte werden benannt. |
| [{"id":1,"name":"Ada"},{"id":2}] | name: string | Fehlen im zweiten Eintrag macht das Feld nicht optional. |
| [1,"two",true] | number[] | Nur der erste Eintrag liefert den Elementtyp. |
| {"nickname":null} | nickname: null | Kein automatischer string | null-Typ. |
| {"items":[]} | items: unknown[] | Keine Form eines Elements vorhanden. |
| {"id":9007199254740993} | JSON.parse liest 9007199254740992 | Eine Ziffer geht bereits vor der Typableitung verloren. |
Was kann eine JSON-Probe über TypeScript-Typen aussagen?
Der Konverter beschreibt die Werte einer konkreten JSON-Probe als TypeScript-Deklarationen. Die Probe zeigt nicht alle möglichen Antworten einer API. Fehlende Felder, erlaubte Alternativen und optionale Eigenschaften müssen aus dem Vertrag oder weiteren Daten geprüft und bei Bedarf manuell ergänzt werden.
Ableitung als Ausgangspunkt, Vertrag als Maßstab
Wähle Interfaces oder Typ-Aliase entsprechend deinem Projekt. Das Werkzeug liest verschachtelte Objekte, nutzt bei Arrays aber nur den ersten Eintrag. Es führt keine Prüfung aller Einträge durch und erzeugt weder Zod-Schemas noch eine Laufzeitvalidierung.
Wie wird es verwendet?
- Füge eine gültige JSON-Probe mit den benötigten Feldern ein.
- Wähle Interfaces oder Typ-Aliase und starte die Umwandlung.
- Vergleiche das Ergebnis mit dem API-Vertrag, ergänze erforderliche Union- oder optionale Typen und kopiere oder lade die Deklarationen herunter.
Echtes Ein- und Ausgabebeispiel
Ein verschachteltes Objekt als Interface
Eingabe
{"id":42,"owner":{"name":"Ada"}}Ausgabe
interface Root {
id: number;
owner: Owner;
}
interface Owner {
name: string;
}
type Payload = Root;Root verweist auf Owner. Die Deklaration beschreibt die Beispielwerte; sie beweist nicht, dass jede spätere Antwort dieselben Felder oder Typen besitzt.
Häufige Fehler und Korrekturen
| Symptom | Wahrscheinliche Ursache | Korrektur |
|---|---|---|
| Ein später fehlendes Feld ist weiterhin erforderlich | Nur das erste Array-Element bestimmt die Struktur. Weitere Einträge ändern die Ableitung nicht. | Prüfe den API-Vertrag. Ergänze ? nur dann manuell, wenn das Feld tatsächlich fehlen darf. |
| Ein gemischtes Array wird als number[] ausgegeben | Der erste Wert ist eine Zahl; spätere Zeichenfolgen oder Wahrheitswerte werden nicht zur Typableitung herangezogen. | Ersetze den Elementtyp bei Bedarf durch den erlaubten Union-Typ, etwa (number | string | boolean)[], und prüfe den Vertrag. |
| Eine große numerische Kennung verändert sich | JSON.parse verwendet JavaScript-Zahlen und kann ganze Zahlen außerhalb des sicheren Bereichs runden. | Übermittle Kennungen an der Quelle als Zeichenfolge, wenn der Vertrag dies vorsieht. Nachträgliche Anführungszeichen stellen verlorene Ziffern nicht wieder her. |
Deklarationen ersetzen keine Laufzeitvalidierung
TypeScript-Typen prüfen keine empfangenen Daten zur Laufzeit. null wird als null abgeleitet, ein leeres Array als unknown[]. Lokale Verarbeitung bedeutet außerdem keine verlustfreie Zahlendarstellung: JSON.parse kann große Zahlen bereits vor der Ableitung runden.
Standards und Implementierungsquellen
- TypeScript-Handbuch: Objekttypen (opens in a new tab)Interfaces, Eigenschaften und optionale Felder.
- TypeScript-Handbuch: Alltagstypen (opens in a new tab)Arrays, Typ-Aliase, Union-Typen und null.
- ECMAScript: JSON.parse (opens in a new tab)Definiert die JSON-Analyse vor der Typableitung.
JSON → TypeScript — FAQ
Werden optionale Felder über alle Array-Einträge erkannt?
Nein. Bei [{"id":1,"name":"Ada"},{"id":2}] wird name weiterhin als erforderlich erzeugt. Prüfe, ob der API-Vertrag das Fehlen erlaubt, und ergänze gegebenenfalls ?.
Welche Typen entstehen für null und leere Arrays?
null erzeugt den Typ null, keine automatisch ergänzte Union wie string | null. Ein leeres Array erzeugt unknown[], weil kein Element zur Untersuchung vorliegt.
Prüft ein Interface späteres JSON?
Nein. Interfaces und Typ-Aliase beschreiben Typen für die Entwicklungszeit. Eingehende Daten brauchen eine gesonderte Laufzeitprüfung, wenn du ihre Struktur sicherstellen musst.
Werden JSON-Werte hochgeladen oder verlustfrei gelesen?
Die Verarbeitung findet lokal statt und legt keine Eingabedaten in der URL ab. Der verwendete JSON.parse kann große numerische Werte runden; das Werkzeug ist kein verlustfreier JSON-Parser.
Was wurde geändert?
Deutsche Erklärung und Bedienung ergänzt; sechs tatsächliche Fälle in beiden Deklarationsmodi samt Grenzen dokumentiert.