Comment rendre toutes les propriétés du schéma Zod facultatives en fonction d'un indicateur de disponibilité de produit spécifique ?
P粉298305266
2023-08-30 22:37:05
<p>J'ai un schéma Zod pour valider les attributs de produit pour une application de commerce électronique. Dans mon schéma, j'ai actuellement un attribut appelé <code>isLimitedEdition</code> qui indique si le produit est en quantité limitée. Cependant, lorsque <code>isLimitedEdition</code> est défini sur true , je souhaite que toutes les autres propriétés du schéma deviennent facultatives. </p>
<p>Voici l'architecture existante :</p>
<pre class="brush:php;toolbar:false;">const productProperties = z.object({
nom : z.string().nonempty(),
description : z.string().nonempty(),
prix : z.number().positive(),
catégorie : z.string().nonempty(),
marque : z.string().nonempty(),
isFeatured : z.boolean().default(false),
isLimitedEdition : z.boolean().default(false),
});</pré>
<p>Dans cette architecture, je souhaite implémenter un comportement dans lequel si isLimitedEdition est défini sur true, toutes les propriétés (nom, description, prix, catégorie, marque, isFeatured) deviennent facultatives. </p>
<p>Comment puis-je modifier ce schéma pour obtenir le comportement souhaité ? Je serais reconnaissant pour toute orientation ou exemple de code pour m'aider à mettre en œuvre cette logique correctement. Merci d'avance! </p>
<p>J'ai essayé la méthode <code>refine</code> sans succès</p>
Vous pouvez utiliser
discriminatedUnion
pour y parvenir :