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
P粉298305266 2023-08-30 22:37:05
0
1
464
<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>
P粉298305266
P粉298305266

répondre à tous(1)
P粉225961749

Vous pouvez utiliser discriminatedUnion pour y parvenir :

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) }),
])
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal