如何根据特定产品可用性标志使 Zod 架构中的所有属性可选?
P粉298305266
2023-08-30 22:37:05
<p>我有一个 Zod 架构,用于验证电子商务应用程序的产品属性。在我的架构中,我当前有一个名为 <code>isLimitedEdition</code> 的属性,它指示产品是否限量供应。但是,当 <code>isLimitedEdition</code> 设置为 true 时,我希望架构中的所有其他属性都变为可选。</p>
<p>这是现有的架构结构:</p>
<pre class="brush:php;toolbar:false;">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),
});</pre>
<p>在此架构中,我希望实现一种行为:如果 isLimitedEdition 设置为 true,则所有属性(名称、描述、价格、类别、品牌、isFeatured)都变为可选。</p>
<p>如何修改此架构以实现所需的行为?我将不胜感激任何指导或代码示例来帮助我正确实现这个逻辑。预先感谢您!</p>
<p>我尝试了<code>refine</code>方法,但没有成功</p>
您可以使用
discriminatedUnion
来实现此目的: