Дані, що повертаються з мережевого запиту, мають тип any — TypeScript довіряє вашому приведенню, але сервер може надіслати щось інше. $mol постачає дві невеликі бібліотеки схем часу виконання, які перетворюють ненадійний JSON на типізоване, перевірене значення й гучно падають — із читабельним шляхом — коли форма неправильна. Використовуйте їх саме там, де дані входять у застосунок, найчастіше на відповіді fetch.
$mol_data — стислі функціональні парсери (у стилі zod). Ви компонуєте маленькі функції-парсери й викликаєте результат на значенні.$mol_schema — схеми на основі класів зі значеннями за замовчуванням. Ви розширюєте клас-запис і отримуєте .guard(), .cast(), .check() та .default.Обидві перевіряють під час виконання й виводять статичний тип за вас. Беріть $mol_data для швидких DTO та (де)серіалізації; беріть $mol_schema, коли хочете іменовані, повторно використовувані класи схем зі значеннями за замовчуванням і м'яким приведенням.
Опишіть форму як запис парсерів полів:1const UserDTO=$mol_data_record({2name:$mol_data_string,3age:$mol_data_optional($mol_data_integer),4mail:$mol_data_email,5})Викличте його на сирому значенні. Коректні дані проходять, повністю типізовані; некоректні дані кидають $mol_data_error, називаючи точний шлях, що не пройшов: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 /.+@.+/Повторно використовуйте виведений тип будь-де за допомогою typeof UserDTO.Value:1function greet(user:typeofUserDTO.Value){2return `Hello, ${ user.name }`3}Будівельні блоки охоплюють $mol_data_string, $mol_data_number, $mol_data_integer, $mol_data_boolean, $mol_data_email, $mol_data_optional, $mol_data_nullable, $mol_data_variant (один із кількох типів), $mol_data_array, $mol_data_dict та $mol_data_record. $mol_data_pipe подає розібране значення в перетворення — наприклад ISO-рядок у $mol_time_moment — що заразом слугує (де)серіалізацією.
Визначте схему як клас, що розширює запис:1export class $my_userextends$mol_schema_record({2name:$mol_schema_string,3age:$mol_schema_natural,4}){}Тоді у вас є три способи застосувати її, плюс готове значення за замовчуванням: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 }Листові схеми охоплюють $mol_schema_string, $mol_schema_integer, $mol_schema_natural, $mol_schema_float, $mol_schema_boolean, $mol_schema_enum([...]) та $mol_schema_pattern(/re/). Компонуйте їх за допомогою $mol_schema_list(Item), $mol_schema_dict([Key,Val]), $mol_schema_maybe(S) (значення, null або undefined), $mol_schema_some([...]) (об'єднання) та $mol_schema_partial({...}). Розгорніть поля іншого запису за допомогою ...Base.Fields:Редагувати цю сторінку на GitHubЦе було корисно?ТакНіНазадОтримання данихДаліGiper BazaНа цій сторінціДві бібліотеки$mol_data$mol_schemaПеревірка відповіді fetchДаліType to search the documentation.