Skip to content

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'] }] }

示例 ​

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) });

另请参阅 ​