- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个status = 'DRAFT' | 'READY'
我的表单中的枚举字段,是否可以更改 zod
中的验证lib 基于该字段的值?
// validation passed
{
name: "John",
surname: null,
status: "DRAFT"
}
// validation failed
{
name: "John",
surname: null,
status: "READY"
}
本质上如果 status === "READY"
删除.min(1)
从这里开始
const schema = z.object({
name: z.string(),
surname: z.string().min(1),
status: z.enum(["READY", "DRAFT"])
});
最佳答案
您使用union
得出的答案是可能的。将来可能产生更好类型的另一种选择是利用 zod 的 discriminatedUnion
架构:
// placing shared fields in one place to avoid repetition
const base = z.object({
name: z.string(),
});
const schema = z.discriminatedUnion(
'status',
[
z.object({
status: z.literal("DRAFT"),
surname: z.string(),
}).merge(base),
z.object({
status: z.literal("READY"),
surname: z.string().min(1),
}).merge(base),
],
);
在这种情况下,我相信您最终会得到与直接使用 union
相同的推断类型,但是,这种方法对于您可能想要区分的其他更改稍微更具弹性。例如,如果 DRAFT
对象允许 surname
为 可选
,那么使用可区分联合,您可以细化为非可选类型,如果 状态
是“READY”
。
通过 union
定义,该示例中 surname
的类型将始终为 string |无论
。status
的值如何,都未定义
关于reactjs - 基于表单字段的zod条件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74157068/
我有数字或数字字符串,我想将它转换为数字并继续通过 .min() .max() 验证它,但它不起作用正如我所料 const numberValid = z.number().or(z.string()
我无法弄清楚如何使用 Zod 检查数字的位数。 由于我将字符串值转换为数字,因此无法使用 min() 或 max() 来检查位数。 在构建架构时,我尝试使用 lte() 和 gte() 进行以下操作:
我有以下 zod 架构,在某些情况下,我想从架构中完全省略一个字段。我不能让它成为可选的。我怀疑有一些方法可以直接用 zod 来完成。有没有办法省略字段或以某种方式预处理模式? 例如,我如何在没有这个
所以我想从 Zod 中的数组中的对象的键中获取类型。该数组还嵌套在一个对象中,只是为了让事情变得更加困难。 这是我遇到的问题的抽象 View : const obj = z.object({ ne
我想使用 z.nativeEnum() 验证 Zod 的性别字段,但我的自定义错误消息不适用: gender: z.nativeEnum(Gender, { invalid_type_
我想使用 z.nativeEnum() 验证 Zod 的性别字段,但我的自定义错误消息不适用: gender: z.nativeEnum(Gender, { invalid_type_
我使用 JOI 实现了这段代码,其中用户必须发送 userId 和至少一个来自正文的键。如何使用 ZOD 实现同样的功能?? params: Joi.object().keys({ use
我有一个使用 zod 的应用程序,但我想使用来自不同库(validator.js)的一些方法 zod 文档说: 查看 validator.js 以了解其他一些有用的字符串验证功能。 不确定这是否意味着
我有这种类型: export interface ConnectorForModel { _type: "connector.for.model", connectorDefiniti
我创建了一个客户注册表,但所有来自我的“错误”的“消息”都会按要求发送。有人知道这会是什么吗?我在Zod或Reaction-Hook-Form中设置的错误。下面我将留下代码的指纹。。这是我的通用输入组
我是一名优秀的程序员,十分优秀!