19 Punkte von xguru 2025-02-06 | Noch keine Kommentare. | Auf WhatsApp teilen
  • Eine Spezifikation, die so entworfen wurde, dass JavaScript-/TypeScript-basierte Schema-Bibliotheken eine gemeinsame Schnittstelle implementieren
  • Ziel ist es, von Nutzern definierte Typvalidierungslogik bibliotheksübergreifend wiederverwendbar zu machen, sodass Tools ohne separate Adapter miteinander kompatibel sind
  • Gemeinsam entworfen von den Machern wichtiger Bibliotheken wie Zod, Valibot und ArkType

Wichtige Schnittstelle (StandardSchemaV1)

  • Die gesamte Spezifikation wird über die Objekteigenschaft ~standard implementiert
  • Innerhalb von ~standard gibt es erforderliche Properties wie version, vendor, validate und types
  • Die Funktion validate gibt bei Erfolg value und bei Fehlschlag ein Array issues zurück
  • Über die Property types lassen sich in TypeScript die Eingabe- (input) und Ausgabe- (output) Typen des Schemas ableiten
  • Alle Updates bleiben kompatibel, solange es sich nicht um eine Major-Version handelt

Designziele

  • Unterstützung für Runtime-Validierung: Fehlerinformationen werden standardisiert im Standardformat übergeben
  • Unterstützung für statische Typinferenz: Von TypeScript-basierten Bibliotheken abgeleitete Typinformationen werden explizit offengelegt
  • Kompaktheit: Die Implementierung kann mit nur wenigen Zeilen zu bestehenden Bibliotheksfunktionen hinzugefügt werden
  • Vermeidung von API-Konflikten: Alles liegt ausschließlich im Namensraum ~standard, um Kollisionen mit bestehenden APIs zu vermeiden
  • Erhalt der Developer Experience: Durch den Beginn mit Tilde (~) erhält ~standard in der Autovervollständigung eine niedrigere Priorität

Welche Bibliotheken implementieren es?

  • Standard Schema wird bereits von Zod, Valibot, ArkType, Arri Schema, TypeMap und weiteren unterstützt
  • Auch tRPC, TanStack Form, TanStack Router und Hono Middleware akzeptieren Nutzerschemata auf Basis von Standard Schema

So implementiert man die Spezifikation in der eigenen Bibliothek

  • Das Interface StandardSchemaV1 in die Bibliothek kopieren und die Property ~standard hinzufügen
  • Die Funktion validate mit der bestehenden Validierungsfunktion verbinden, sodass bei Erfolg { value } und bei Fehlschlag { issues } zurückgegeben wird
  • Bei Bedarf ist auch asynchrone Validierung möglich, empfohlen wird jedoch synchrone Validierung

So nimmt man benutzerdefinierte Schemata über Standard Schema entgegen

  • Wer es ohne Schema-Bibliothek direkt nutzen möchte, installiert @standard-schema/spec oder kopiert das Interface zur Verwendung
  • Wie bei der Beispielfunktion standardValidate kann bei jedem Schema mit Standard-Schnittstelle die Validierung bibliotheksunabhängig auf dieselbe Weise erfolgen
  • Wenn nur synchrone Validierung erlaubt sein soll, genügt es zu prüfen, ob der Rückgabewert von validate ein Promise ist, und dann eine Ausnahme zu behandeln

FAQ

  • Muss die Abhängigkeit @standard-schema/spec hinzugefügt werden?: Sie muss nicht zwingend als Abhängigkeit hinzugefügt werden; Kopieren und direkte Verwendung sind möglich
  • Kann nicht als dev dependency hinzugefügt werden: Da sie Teil der öffentlichen API einer Bibliothek wird, muss sie auch in der tatsächlichen Laufzeitumgebung verfügbar sein
  • Warum wird vor ~standard eine Tilde (~) verwendet?: Damit es in der Autovervollständigung hinter anderen Properties erscheint
  • Warum wird statt Symbol ein String-Key verwendet?: Weil Symbol-Keys in TypeScript Probleme bei Sortierung in der Autovervollständigung und Typinferenz verursachen

Noch keine Kommentare.

Noch keine Kommentare.