tinyval
小巧、快速、零依赖的数据校验库 —— 适用于浏览器和服务端。
- 典型表单约 2.5 kB gzip,整个包约 5.5 kB —— 只有导入的部分才会进入打包结果
- TypeScript 类型从 Schema 推导
- 嵌套对象和数组、多余字段处理、类型转换、数据转换、异步检查
安装
bash
npm install tinyval试一试
快速开始
ts
import { validate, object, string, optional, pipe, trim, minLength, email, min, coerce, type Infer } from 'tinyval';
const User = object({
name: pipe(string(), trim(), minLength(2)),
email: pipe(string(), trim(), email()),
age: optional(pipe(coerce.number(), min(0))),
});
type User = Infer<typeof User>; // { name: string; email: string; age?: number }
const result = validate(User, input);
if (result.valid) {
result.data; // 清洗后的、带类型的数据
} else {
result.errors; // { name: '...', email: '...' }
}在服务端使用 parse 更方便 —— 它返回数据或抛出 ValidationError。
组成部分
| 部分 | 内容 |
|---|---|
| 函数 | 执行校验:validate、validateAsync、parse、parseAsync |
| Schema | 数据类型:string、number、object、array、optional、union、variant、coerce… |
| 条件 | 类似 Laravel:requiredIf、requiredWith、requiredWithout、prohibitedIf |
| 对象操作 | 基于已有 Schema 创建新 Schema:partial、pick、omit、extend |
| 规则 | 通过 pipe 进行检查和转换:minLength、email、sameAs、trim、check… |
延伸阅读
- 校验结果 ——
data、errors和issues中有什么 - 空值 —— 为什么
''被视为未填写 - 错误信息与国际化 —— 自定义错误文本和语言包
- TypeScript —— 从 Schema 获取类型
- 自定义规则与 Schema —— 内置规则不够用时
- tinyval-vue —— Vue 表单:
useForm、错误、提交、服务端错误 - Standard Schema —— 在 tRPC、Hono、TanStack Form、React Hook Form 中使用 tinyval Schema