Lzh on GitHub

除了 parsesafeParse,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 使它们变为必需,甚至可以使用 pickomit 从现有模式中包含/排除某些值。

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']
  ));