smalljs$mol搜索⌘ K文档演练场对比生态系统关于ZH
数据模式Getting Started介绍心智模型快速上手从 TypeScript 到 view.tree项目结构工具链Essentials安装视图状态与响应式路由渲染测试部署故障排查Data数据获取数据模式Giper BazaMore展示来自 React、Vue 和 Svelte食谱Advanced插件模块元数据离线幽灵视图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两者都在运行时校验,并为你推断静态类型。做快速 DTO 和(反)序列化时用 $mol_data;想要具名、可复用、带默认值和宽松转换的模式类时用 $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 )(值、nullundefined)、$mol_schema_some([ ... ])(联合)和 $mol_schema_partial({ ... }) 组合它们。用 ...Base.Fields 展开另一个记录的字段:1export class $my_account extends $mol_schema_record({2 ... $my_user.Fields,3 bio: $mol_schema_string,4}) {}
在 GitHub 上编辑此页这有帮助吗?上一页数据获取下一页Giper Baza
本页内容两个库$mol_data$mol_schema校验一个 fetch 响应下一步
Type to search the documentation.