Lzh on GitHub

枚举类型是一种由一组值组成的数据类型。它们可以用对象、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));