Enums
枚举类型是一种由一组值组成的数据类型。它们可以用对象、TypeScript 枚举或数组来表示,以保持简单。你对对象和 TypeScript 枚举使用 enum,对数组使用 picklist。
enum 模式
由于 TypeScript 枚举被 TypeScript 编译器转换为 JavaScript 对象,因此你可以对两者都使用 enum 模式函数。只需将你的枚举数据类型作为第一个参数传递给模式函数。验证时,该模式会检查输入是否与枚举中的某个值匹配。
import * as v from 'valibot';
// 作为 JavaScript 对象
const Direction = {
Left: 'LEFT',
Right: 'RIGHT',
} as const;
// 作为 TypeScript 枚举
enum Direction {
Left = 'LEFT',
Right = 'RIGHT',
}
const DirectionSchema = v.enum(Direction);
picklist 模式
对于由数组表示的一组值,你可以使用 picklist 模式函数。只需将你的数组作为第一个参数传递给模式函数。验证时,该模式会检查输入是否与数组中的某个项匹配。
import * as v from 'valibot';
const Direction = ['LEFT', 'RIGHT'] as const;
const DirectionSchema = v.picklist(Direction);
格式化数组
在某些情况下,数组的格式可能不正确。在这种情况下,只需使用 .map() 方法将其转换为所需的格式。
import * as v from 'valibot';
const countries = [
{ name: 'Germany', code: 'DE' },
{ name: 'France', code: 'FR' },
{ name: 'United States', code: 'US' },
] as const;
const CountrySchema = v.picklist(countries.map((country) => country.code));