Dane wracające z żądania sieciowego mają typ any — TypeScript ufa twojemu rzutowaniu, ale serwer może wysłać coś innego. $mol dostarcza dwie małe biblioteki schematów działające w czasie wykonania, które zamieniają niezaufany JSON w typowaną, zwalidowaną wartość i zawodzą głośno — z czytelną ścieżką — gdy kształt jest zły. Używaj ich tam, gdzie dane wchodzą do aplikacji, najczęściej na odpowiedzi fetch.
$mol_data — zwięzłe, funkcyjne parsery (w stylu zod). Komponujesz małe funkcje parsujące i wywołujesz wynik na wartości.$mol_schema — schematy oparte na klasach z wartościami domyślnymi. Rozszerzasz klasę rekordu i otrzymujesz .guard(), .cast(), .check() oraz .default.Obie walidują w czasie wykonania i wnioskują za ciebie typ statyczny. Sięgnij po $mol_data dla szybkich DTO i (de)serializacji; sięgnij po $mol_schema, gdy chcesz nazwane, wielokrotnego użytku klasy schematów z wartościami domyślnymi i luźnym rzutowaniem.
Opisz kształt jako rekord parserów pól:1const UserDTO=$mol_data_record({2name:$mol_data_string,3age:$mol_data_optional($mol_data_integer),4mail:$mol_data_email,5})Wywołaj go na surowej wartości. Poprawne dane przechodzą, w pełni typowane; błędne dane rzucają $mol_data_error nazywający dokładną ścieżkę, która zawiodła: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 /.+@.+/Użyj ponownie wywnioskowanego typu wszędzie za pomocą typeof UserDTO.Value:1function greet(user:typeofUserDTO.Value){2return `Hello, ${ user.name }`3}Klocki obejmują $mol_data_string, $mol_data_number, $mol_data_integer, $mol_data_boolean, $mol_data_email, $mol_data_optional, $mol_data_nullable, $mol_data_variant (jeden z kilku typów), $mol_data_array, $mol_data_dict oraz $mol_data_record. $mol_data_pipe przekazuje sparsowaną wartość do transformacji — na przykład ciąg ISO do $mol_time_moment — co jednocześnie służy jako (de)serializacja.
Zdefiniuj schemat jako klasę rozszerzającą rekord:1export class $my_userextends$mol_schema_record({2name:$mol_schema_string,3age:$mol_schema_natural,4}){}Masz wtedy trzy sposoby jego zastosowania oraz gotową wartość domyślną: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 }Schematy liściowe obejmują $mol_schema_string, $mol_schema_integer, $mol_schema_natural, $mol_schema_float, $mol_schema_boolean, $mol_schema_enum([...]) oraz $mol_schema_pattern(/re/). Komponuj je za pomocą $mol_schema_list(Item), $mol_schema_dict([Key,Val]), $mol_schema_maybe(S) (wartość, null lub undefined), $mol_schema_some([...]) (unia) oraz $mol_schema_partial({...}). Rozłóż pola innego rekordu za pomocą ...Base.Fields:Edytuj tę stronę na GitHubieCzy to było pomocne?TakNiePoprzedniaPobieranie danychNastępnaGiper BazaNa tej stronieDwie biblioteki$mol_data$mol_schemaWalidacja odpowiedzi fetchDalejType to search the documentation.