如何根据特定产品可用性标志使 Zod 架构中的所有属性可选?
P粉298305266
P粉298305266 2023-08-30 22:37:05
[JavaScript讨论组]

我有一个 Zod 架构,用于验证电子商务应用程序的产品属性。在我的架构中,我当前有一个名为 isLimitedEdition 的属性,它指示产品是否限量供应。但是,当 isLimitedEdition 设置为 true 时,我希望架构中的所有其他属性都变为可选。

这是现有的架构结构:

const productProperties = z.object({
  name: z.string().nonempty(),
  description: z.string().nonempty(),
  price: z.number().positive(),
  category: z.string().nonempty(),
  brand: z.string().nonempty(),
  isFeatured: z.boolean().default(false),
  isLimitedEdition: z.boolean().default(false),
});

在此架构中,我希望实现一种行为:如果 isLimitedEdition 设置为 true,则所有属性(名称、描述、价格、类别、品牌、isFeatured)都变为可选。

如何修改此架构以实现所需的行为?我将不胜感激任何指导或代码示例来帮助我正确实现这个逻辑。预先感谢您!

我尝试了refine方法,但没有成功

P粉298305266
P粉298305266

全部回复(1)
P粉225961749

您可以使用 discriminatedUnion 来实现此目的:

const productProperties = z.object({
  name: z.string().nonempty(),
  description: z.string().nonempty(),
  price: z.number().positive(),
  category: z.string().nonempty(),
  brand: z.string().nonempty(),
  isFeatured: z.boolean().default(false),
})

const product = z.discriminatedUnion('isLimitedEdition', [
  productProperties.extend({ isLimitedEdition: z.literal(false) }),
  productProperties.partial().extend({ isLimitedEdition: z.literal(true) }),
])
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号