方法
除了 parse 和 safeParse,Valibot 还提供了一些其他方法,以使模式的使用更简单。下面,我们将这些方法分为模式方法、对象方法和管道方法。
模式方法
模式方法增加了功能、简化了人体工程学,并帮助你使用模式进行验证和数据提取。
模式方法:assert, config, fallback, flatten, getDefault, getDefaults, getDescription, getFallback, getFallbacks, getMetadata, getTitle, is, message, parse, safeParse, summarize, pipe, unwrap
有关
pipe的更多信息,请参阅 管道 指南。有关验证方法的更多信息,请参阅 解析数据 指南。有关flatten的更多信息,请参阅 问题 指南。
Fallback
如果在验证模式时发生问题,你可以使用 fallback 来捕获它,并返回一个预定义的值作为替代。
import * as v from 'valibot';
const StringSchema = v.fallback(v.string(), 'hello');
const stringOutput = v.parse(StringSchema, 123); // 'hello'
对象方法
对象方法使你能够更轻松地处理对象模式。它们与 TypeScript 的实用工具类型高度相似。
对象方法:keyof, omit, partial, pick, required
TypeScript 相似性
就像在 TypeScript 中一样,你可以使用 partial 使对象的某些值变为可选,使用 required 使它们变为必需,甚至可以使用 pick 和 omit 从现有模式中包含/排除某些值。
import * as v from 'valibot';
// TypeScript
type Object1 = Partial<{ key1: string; key2: number }>;
// Valibot
const object1 = v.partial(v.object({ key1: v.string(), key2: v.number() }));
// TypeScript
type Object2 = Pick<Object1, 'key1'>;
// Valibot
const object2 = v.pick(object1, ['key1']);
管道方法
管道方法用于修改管道内验证和转换的结果。
管道方法:forward
有关管道功能的更多信息,请参阅 管道 指南。
Forward
forward 允许你将一个问题与一个嵌套模式关联起来。例如,如果你想检查注册表单中的两次密码输入是否匹配,你可以用它在出现错误时将问题转发到第二个密码字段。这使得你可以在正确的位置显示错误信息。
import * as v from 'valibot';
const RegisterSchema = v.pipe(
v.object({
email: v.pipe(
v.string(),
v.nonEmpty('请输入你的电子邮件。'),
v.email('电子邮件地址格式不正确。')
),
password1: v.pipe(
v.string(),
v.nonEmpty('请输入你的密码。'),
v.minLength(8, '你的密码必须有 8 个或更多字符。')
),
password2: v.string(),
}),
v.forward(
v.partialCheck(
[['password1'], ['password2']],
(input) => input.password1 === input.password2,
'两次输入的密码不匹配。'
),
['password2']
));