Daten, die von einer Netzwerkanfrage zurückkommen, sind any — TypeScript vertraut Ihrem Cast, aber der Server könnte etwas anderes senden. $mol liefert zwei kleine Laufzeit-Schema-Bibliotheken, die nicht vertrauenswürdiges JSON in einen typisierten, validierten Wert verwandeln und laut fehlschlagen — mit einem lesbaren Pfad — wenn die Form falsch ist. Verwenden Sie sie genau dort, wo Daten in die App gelangen, meist bei einer fetch-Antwort.
$mol_data — knappe, funktionale Parser (zod-artig). Sie setzen kleine Parser-Funktionen zusammen und rufen das Ergebnis auf einem Wert auf.$mol_schema — klassenbasierte Schemas mit Standardwerten. Sie erweitern eine Record-Klasse und erhalten .guard(), .cast(), .check() und ein .default.Beide validieren zur Laufzeit und leiten den statischen Typ für Sie ab. Greifen Sie zu $mol_data für schnelle DTOs und (De-)Serialisierung; greifen Sie zu $mol_schema, wenn Sie benannte, wiederverwendbare Schema-Klassen mit Standardwerten und lockerem Casting wollen.
Beschreiben Sie die Form als Record von Feld-Parsern:1const UserDTO=$mol_data_record({2name:$mol_data_string,3age:$mol_data_optional($mol_data_integer),4mail:$mol_data_email,5})Rufen Sie es auf dem Rohwert auf. Gültige Daten gehen durch, vollständig typisiert; ungültige Daten werfen einen $mol_data_error, der den genauen fehlgeschlagenen Pfad nennt:1const user=UserDTO(json)2// user: { readonly name: string; readonly age?: number; readonly mail: string }34// If json.mail is "</script>", it throws:5// ["mail"] </script> is not a /.+@.+/Verwenden Sie den abgeleiteten Typ überall wieder mit typeof UserDTO.Value:1function greet(user:typeofUserDTO.Value){2return `Hello, ${ user.name }`3}Zu den Bausteinen gehören $mol_data_string, $mol_data_number, $mol_data_integer, $mol_data_boolean, $mol_data_email, $mol_data_optional, $mol_data_nullable, $mol_data_variant (einer von mehreren Typen), $mol_data_array, $mol_data_dict und $mol_data_record. $mol_data_pipe speist einen geparsten Wert in eine Transformation — zum Beispiel eine ISO-Zeichenkette in ein $mol_time_moment — was zugleich als (De-)Serialisierung dient.
Definieren Sie ein Schema als Klasse, die einen Record erweitert:1export class $my_userextends$mol_schema_record({2name:$mol_schema_string,3age:$mol_schema_natural,4}){}Sie haben dann drei Möglichkeiten, es anzuwenden, plus einen fertigen Standardwert:1const safe=$my_user.guard(input)// strict: throws on wrong data2const relaxed=$my_user.cast(input)// fills defaults instead of throwing3if ($my_user.check(input)){/* input is $my_user in here */}4const blank=$my_user.default// { name: '', age: 0 }Zu den Blatt-Schemas gehören $mol_schema_string, $mol_schema_integer, $mol_schema_natural, $mol_schema_float, $mol_schema_boolean, $mol_schema_enum([...]) und $mol_schema_pattern(/re/). Setzen Sie sie zusammen mit $mol_schema_list(Item), $mol_schema_dict([Key,Val]), $mol_schema_maybe(S) (ein Wert, null oder undefined), $mol_schema_some([...]) (eine Vereinigung) und $mol_schema_partial({...}). Streuen Sie die Felder eines anderen Records mit ...Base.Fields:Diese Seite auf GitHub bearbeitenWar das hilfreich?JaNeinZurückDatenabrufWeiterGiper BazaAuf dieser SeiteZwei Bibliotheken$mol_data$mol_schemaEine fetch-Antwort validierenWeiterType to search the documentation.