Данные, возвращаемые из сетевого запроса, имеют тип 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Было полезно?ДаНетНазадЗагрузка данныхВперёдГипер БазаНа этой страницеДве библиотеки$mol_data$mol_schemaПроверка ответа fetchДальшеType to search the documentation.