简介
你好,我是 Valibot,我希望通过模式(schema)来帮助你轻松验证数据。无论数据是来自服务器、表单还是配置文件。我没有依赖项,可以在任何 JavaScript 环境中运行。
亮点
- 完全类型安全,支持静态类型推断
- 捆绑包体积小,起始大小不到 700 字节
- 验证一切,从字符串到复杂对象
- 开源且经过全面测试,覆盖率达 100%
- 包含许多转换和验证操作
- 源码结构良好,无依赖项
- API 极简、可读、经过深思熟虑
示例
首先,你创建一个描述结构化数据集的模式(schema)。模式可以比作 TypeScript 中的类型定义。最大的区别是 TypeScript 类型是 “不执行的”,更像是开发体验(DX)功能。另一方面,模式除了推断的类型定义之外,还可以在运行时执行,以保证未知数据的类型安全。
import * as v from 'valibot'; // 1.31 kB
// 创建包含电子邮件和密码的登录模式
const LoginSchema = v.object({
email: v.pipe(v.string(), v.email()),
password: v.pipe(v.string(), v.minLength(8)),
});
// 推断登录模式的输出 TypeScript 类型为
// { email: string; password: string }
type LoginData = v.InferOutput<typeof LoginSchema>;
// 电子邮件和密码验证失败抛出错误
const output1 = v.parse(LoginSchema, { email: '', password: '' });
// 返回数据为 { email: string; password: string }
const output2 = v.parse(LoginSchema, {
email: 'jane@example.com',
password: '12345678',
});
除了 parse,我还提供基于非异常的 API safeParse 以及类型守卫函数 is。你可以在 这里 阅读更多信息。
比较
我没有依赖于几个包含许多方法的大型函数,我的 API 设计和源码基于许多小型、独立的函数,每个函数都只有一个任务。这种模块化设计有几个优点。
例如,这允许打包工具使用 import 语句来移除不需要的代码。这样,只有实际使用的代码才能进入你的生产构建。与 Zod 相比,这可以将捆绑包体积减小高达 95%。
此外,它允许你使用外部代码轻松扩展我的功能,并使我的源码更加健壮和安全,因为单个函数的功能可以通过单元测试更容易地进行测试。
鸣谢
我的朋友 Fabian 在他于 斯图加特媒体大学 的学士论文中创建了我,导师是 Walter Kriha、Miško Hevery 和 Ryan Carniato。我的榜样还包括 Colin McDonnell,他通过 Zod 对我的 API 设计产生了很大的影响。
反馈
发现了一个错误或者对如何改进我的代码有想法?请提交一个 issue。我们可以一起让这个库变得更好!
许可证
我完全免费,并以 MIT 许可证 授权。但如果你喜欢,可以在 GitHub 上给我一颗星。