Les données qui reviennent d'une requête réseau sont de type any — TypeScript fait confiance à votre cast, mais le serveur pourrait envoyer autre chose. $mol fournit deux petites bibliothèques de schémas à l'exécution qui transforment du JSON non fiable en une valeur typée et validée, et échouent bruyamment — avec un chemin lisible — quand la forme est incorrecte. Utilisez-les là où les données entrent dans l'application, le plus souvent sur une réponse fetch.
$mol_data — des parseurs fonctionnels et concis (à la zod). Vous composez de petites fonctions de parsing et appelez le résultat sur une valeur.$mol_schema — des schémas basés sur des classes avec valeurs par défaut. Vous étendez une classe d'enregistrement et obtenez .guard(), .cast(), .check() et un .default.Les deux valident à l'exécution et infèrent le type statique pour vous. Choisissez $mol_data pour des DTO rapides et la (dé)sérialisation ; choisissez $mol_schema quand vous voulez des classes de schéma nommées et réutilisables avec des valeurs par défaut et un cast souple.
Décrivez la forme comme un enregistrement de parseurs de champs :1const UserDTO=$mol_data_record({2name:$mol_data_string,3age:$mol_data_optional($mol_data_integer),4mail:$mol_data_email,5})Appelez-le sur la valeur brute. Les données valides passent, entièrement typées ; les données incorrectes lèvent une $mol_data_error nommant le chemin exact qui a échoué :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 /.+@.+/Réutilisez le type inféré partout avec typeof UserDTO.Value :1function greet(user:typeofUserDTO.Value){2return `Hello, ${ user.name }`3}Les briques de base incluent $mol_data_string, $mol_data_number, $mol_data_integer, $mol_data_boolean, $mol_data_email, $mol_data_optional, $mol_data_nullable, $mol_data_variant (l'un de plusieurs types), $mol_data_array, $mol_data_dict et $mol_data_record. $mol_data_pipe fait passer une valeur parsée dans une transformation — par exemple une chaîne ISO en un $mol_time_moment — ce qui sert aussi de (dé)sérialisation.
Définissez un schéma comme une classe qui étend un enregistrement :1export class $my_userextends$mol_schema_record({2name:$mol_schema_string,3age:$mol_schema_natural,4}){}Vous avez alors trois façons de l'appliquer, plus une valeur par défaut prête à l'emploi :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 }Les schémas feuilles incluent $mol_schema_string, $mol_schema_integer, $mol_schema_natural, $mol_schema_float, $mol_schema_boolean, $mol_schema_enum([...]) et $mol_schema_pattern(/re/). Composez-les avec $mol_schema_list(Item), $mol_schema_dict([Key,Val]), $mol_schema_maybe(S) (une valeur, null ou undefined), $mol_schema_some([...]) (une union) et $mol_schema_partial({...}). Étalez les champs d'un autre enregistrement avec ...Base.Fields :Modifier cette page sur GitHubÉtait-ce utile ?OuiNonPrécédentRécupération de donnéesSuivantGiper BazaSur cette pageDeux bibliothèques$mol_data$mol_schemaValider une réponse fetchSuiteType to search the documentation.