Standard Schema
Standard Schema 是校验库的通用标准,tRPC、Hono、TanStack Form、React Hook Form、Nuxt UI 等都支持它。所有 tinyval Schema 都实现了该标准,因此可以直接传给这些库 —— 无需适配器。
工作方式
每个 Schema 都有一个 ~standard 属性,包含 validate 方法以及输入和输出类型:
ts
const result = User['~standard'].validate(input);
// { value: { ... } } or { issues: [{ message: 'Invalid email', path: ['email'] }] }- 如果 Schema 中包含
checkAsync,validate返回Promise。 - 错误信息与
validate相同,包括setMessages的设置。 - 通过
createSchema创建的自定义 Schema 同样支持该标准。
示例
tRPC
ts
export const appRouter = t.router({
createUser: t.procedure.input(CreateUser).mutation(({ input }) => db.users.create(input)),
});Hono
ts
import { sValidator } from '@hono/standard-validator';
app.post('/users', sValidator('json', CreateUser), (c) => {
const user = c.req.valid('json'); // typed
return c.json(user, 201);
});TanStack Form
ts
const form = useForm({
defaultValues: { name: '', email: '' },
validators: { onChange: CreateUser },
});React Hook Form
ts
import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';
const form = useForm({ resolver: standardSchemaResolver(CreateUser) });另请参阅
- createSchema:支持该标准的自定义 Schema
- TypeScript