reactjs 如何使用zod验证字符串类型

elcex8rz  于 2023-02-04  发布在  React
关注(0)|答案(1)|浏览(166)

我有这种类型

export type PaymentType = 'CHECK' | 'DIRECT DEPOSIT' | 'MONEY ORDER';

我想在zod中验证这个字符串类型。目前,我把is作为一个字符串,但是那个错误不是字符串。我不知道该放什么。

const schema = z.object({
    paymentType: z.string() // I want to validate this field
});

到目前为止,我已经尝试了枚举、字符串和对象,但没有找到正确的答案。

yacmzcpb

yacmzcpb1#

我评论说这可能是重复的,因为问题的核心可以用z.literal解决,但它有一点不同。只是为了说明你可以做什么:

import { z } from 'zod';
const PaymentTypeSchema = z.union([
  z.literal('CHECK'),
  z.literal('DIRECT DEPOSIT'),
  z.literal('MONEY ORDER'),
]);
type PaymentType = z.infer<typeof PaymentTypeSchema>;

const schema = z.object({
  paymentType: PaymentTypeSchema,
});

比这更简单的方法是使用z.enum帮助器,它可以删除一些样板文件:

const PaymentTypeSchema = z.enum(["CHECK", "DIRECT DEPOSIT", "MONEY ORDER"]);
const schema = z.object({
  paymentType: PaymentTypeSchema,
});

或者,您可以将PaymentType设置为枚举,并使用z.nativeEnum解析如下值:

enum PaymentType {
  Check = 'CHECK',
  DirectDeposit = 'DIRECT DEPOSIT',
  MoneyOrder = 'MONEY ORDER'
}

const PaymentTypeSchema = z.nativeEnum(PaymentType);
const schema = z.object({
  paymentType: PaymentTypeSchema,
});

相关问题