JSON zu Schema und Typen
Fügen Sie ein realistisches Beispiel der Daten hinter einem Dokument ein. Sie erhalten das JSON Schema, das daraus folgt — dasselbe, das der Editor für die Autovervollständigung nutzt — und die TypeScript- und Python-Dateien, die formfeed types daraus schreiben würde.
Die Daten verlassen diesen Tab nicht: Schema und Typen entstehen in Ihrem Browser.
Wofür ein Schema hier gut ist
Eine Vorlage besteht aus HTML und den Feldern Ihrer Daten, und jeder Teil von Formfeed, der beim Schreiben hilft, muss diese Felder kennen. Der Editor liest das Schema für die Autovervollständigung und markiert eine Variable, die Ihre Daten nicht haben; formfeed types macht daraus eine Deklarationsdatei, sodass der Compiler die Daten, die Ihr eigener Code sendet, gegen die Felder der Vorlage prüft.
Schreiben müssen Sie so ein Schema nie. Eine Vorlage hält Beispieldaten, und daraus wird es abgeleitet — genau das tut diese Seite, mit derselben Funktion, die der Editor aufruft.
Warum alle Felder optional herauskommen
Ein Beispiel sagt, wie ein Feld aussieht, wenn es da ist. Es sagt nicht, ob es immer da ist: Eine Rechnung ohne Rabattzeile ist keine Rechnung mit einer kaputten. Die Typen aus einem abgeleiteten Schema machen deshalb jedes Feld optional, die von formfeed types ebenso wie diese hier.
Schreiben Sie die Felder, auf die Sie sich wirklich verlassen, in eine schema.json neben die Vorlage, dann nimmt die CLI diese und überträgt sie mit der Vorlage. Eine fehlende Summe ist dann ein Compile-Fehler statt einer leeren Zeile im PDF, eine Anfrage mit validate_data wird abgewiesen, bevor etwas gerendert wird, und eine Version, die Ihre bestehenden Aufrufer brechen würde, lässt sich nur mit allow_breaking veröffentlichen.
Aus demselben Grund steht im Schema oben nichts unter required. Es als schema.json zu speichern macht aus einer Vermutung einen Vertrag — entscheiden Sie also selbst, was dort hineingehört, statt es ein einzelnes Beispiel entscheiden zu lassen.
Dasselbe im Projekt
Sobald die Vorlagen Dateien in Ihrem Repository sind, macht die CLI das ohne Einfügen. Sie liest jeden Vorlagenordner, bevorzugt eine schema.json und leitet sonst über alle Datensätze des Ordners ab — ein Feld, das nur manche Sätze führen, ist dann bewusst optional:
# in a template project: reads schema.json, else infers over data/*.json
formfeed types --lang ts
# then the SDK checks the data against the template
# renders.create({ template: 'invoice', data: { … } })formfeed types --lang python
# then one method per template
# typed(client).invoice({ … })Mit --remote liest sie stattdessen die veröffentlichte Version über die API (bei einer nie veröffentlichten Vorlage den Entwurf), deren gespeichertes Schema oder eines, das aus ihren Datensätzen abgeleitet wird, damit die Typen zu dem passen, was die API wirklich rendert.
Fragen
- Verlassen meine Daten den Browser?
- Nein. Ableitung und Ausgabe laufen auf dieser Seite; nichts wird hochgeladen, nichts gespeichert. Sie können echte Daten einfügen und den Tab schließen.
- Ist das dieselbe Ausgabe wie in der CLI?
- Ja, Byte für Byte, für eine Vorlage desselben Namens, deren einziger Datensatz das Eingefügte ist: Die Seite ruft
inferSchemaaus der Engine undgenerateTypesaus dem Development Kit auf — dieselben Funktionen wieformfeed types. Sie liegen genau deshalb in diesen Paketen, damit keine zweite Kopie davon abweichen kann. - Kann ich das ohne Formfeed nutzen?
- Das JSON Schema ja — es ist ein gewöhnliches Schema nach Draft 2020-12. Die TypeScript-Datei deklariert eine Modul-Erweiterung für
@formfeed/sdk, die Python-Datei baut auf dem Formfeed-Client auf; diese beiden ergeben also nur mit den SDKs Sinn. - Was ist mit Datum, Aufzählungen und Beträgen?
- Ein Datum ist für JSON ein String und wird als solcher typisiert; formatieren Sie den Wert in der Vorlage mit
date, nicht in Ihrem Code. Werte, die nach einer festen Menge aussehen, kommen als ihr Typ heraus, nicht als Union: Ein Beispiel kann einen Status aus drei Zuständen nicht von einem Freitextfeld unterscheiden.
Heute mit dem Rendern beginnen
Der kostenlose Plan enthält 100 Einheiten im Monat und kostenlose Testrenderings. Wechseln Sie den Plan, wenn Sie mehr brauchen.