smalljs$molПоиск⌘ KДокументацияПесочницаСравнениеЭкосистемаО проектеRU
Схемы данныхGetting StartedВведениеМентальная модельБыстрый стартОт TypeScript к view.treeСтруктура проектаИнструментарийEssentialsУстановкаВьюСостояние и реактивностьРоутингРендерингТестированиеДеплойРешение проблемDataЗагрузка данныхСхемы данныхГипер БазаMoreВитринаИз React, Vue и SvelteСборник рецептовAdvancedПлагиныМетаданные модуляОфлайнGhost-вьюAboutЧастые вопросыКомандаРелизыAPI$mol_button_major$mol_button_minor$mol_string$mol_number$mol_text$mol_paragraph$mol_list$mol_row$mol_link$mol_check$mol_switch$mol_select$mol_scroll$mol_page$mol_pick

Схемы данных

Данные, возвращаемые из сетевого запроса, имеют тип any — TypeScript доверяет вашему приведению, но сервер может прислать что-то другое. $mol поставляет две небольшие библиотеки схем времени выполнения, которые превращают недоверенный JSON в типизированное, проверенное значение и громко падают — с читаемым путём — когда форма неверна. Используйте их прямо там, где данные входят в приложение, чаще всего на ответе fetch.

Две библиотеки

$mol_data — лаконичные функциональные парсеры (в стиле zod). Вы компонуете маленькие функции-парсеры и вызываете результат на значении.$mol_schema — схемы на основе классов со значениями по умолчанию. Вы расширяете класс-запись и получаете .guard(), .cast(), .check() и .default.Обе проверяют во время выполнения и выводят статический тип за вас. Берите $mol_data для быстрых DTO и (де)сериализации; берите $mol_schema, когда нужны именованные, переиспользуемые классы схем со значениями по умолчанию и мягким приведением.

$mol_data

Опишите форму как запись парсеров полей:1const UserDTO = $mol_data_record({2 name: $mol_data_string,3 age: $mol_data_optional( $mol_data_integer ),4 mail: $mol_data_email,5})Вызовите его на сыром значении. Корректные данные проходят, полностью типизированные; некорректные данные кидают $mol_data_error, называя точный путь, который не прошёл:1const user = UserDTO( json )2// user: { readonly name: string; readonly age?: number; readonly mail: string }3 4// If json.mail is "</script>", it throws:5// ["mail"] </script> is not a /.+@.+/Переиспользуйте выведенный тип где угодно с помощью typeof UserDTO.Value:1function greet( user: typeof UserDTO.Value ) {2 return `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 — что заодно служит (де)сериализацией.

$mol_schema

Определите схему как класс, расширяющий запись:1export class $my_user extends $mol_schema_record({2 name: $mol_schema_string,3 age: $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.