5 Punkte von asheswook 2025-12-24 | 2 Kommentare | Auf WhatsApp teilen

Hallo.

Wenn man allgemein TypeScript-Backends entwickelt, merkt man schnell, dass viele Fehler typischerweise im Runtime-Bereich auftreten, also dort, wo sie zur Compile-Zeit nicht erkannt werden.

Das passiert zum Beispiel besonders häufig bei Repository-Implementierungen, die DB-Zeilen parsen, oder bei der Kommunikation mit externen APIs.

Werte aus der DB weichen dann etwa von den Erwartungen ab, sodass zur Runtime undefined eingefügt wird, oder beim Casting wird ein von außen kommender primitiver Wert nicht korrekt erkannt, was zu menschlichen Fehlern führt.

Auch bei der Implementierung von Repositories muss man oft Interfaces mit vielen Typdefinitionen für primitive Werte ergänzen, die von außen hereinkommen. Vielleicht ist das nur ein kleines Problem, aber ich habe es gebaut, damit man damit bequemer arbeiten kann.

Tatsächlich ist der Code für externe APIs und DB-Implementierungen deutlich kompakter geworden, und auch Runtime-Fehler sind seltener geworden.

Wir haben es im Team im Backend eingesetzt, fanden es ziemlich gut und haben es deshalb auf npm veröffentlicht.

import { validate } from 'valdex';  
  
const data: unknown = await fetchData();  
  
validate(data, {  
  name: String,  
  age: Number,  
  active: Boolean  
});  
  
// TypeScript now knows the exact type of data  
data.name // string  
data.age // number  
data.active // boolean  

Das obige Beispiel geht von einer Situation aus, in der Daten von außen geladen werden. Es lässt sich unabhängig davon anwenden, ob man axios, mysql2 oder postgres pg verwendet. Es wird eine Validierung für einen Wert durchgeführt, der als Typ unknown hereinkommt. Ist er gültig, wird dieser Wert im anschließenden Control Flow auf den in validate() definierten Typ asserted.

Natürlich kann man auch eine Bibliothek wie zod verwenden.

Der Unterschied zwischen zod und valdex besteht darin, dass valdex kein Schema als Instanz erzeugt und verwendet, sondern Datentypen direkt an der Stelle, an der die Daten hereinkommen, deklarativ behandeln kann. Man muss nicht mehr ständig im Code auf und ab springen, nur um ein Interface oder eine DTO-Klasse zu ändern.

npm i valdex  

Man kann es über npm installieren und ausprobieren.

Github: https://github.com/asheswook/valdex

2 Kommentare

 
sunrabbit 2025-12-24

Für einfache Typen scheint es eine wirklich gute DX zu bieten, wow.

 
asheswook 2025-12-24

Da sowohl verschachtelte Objekte als auch Arrays unterstützt werden, gab es bei der Implementierung externer APIs oder Repositories bislang keinen Punkt, der mich gestört hätte.
Vielen Dank für Ihr Interesse!