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
338

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é isLimitedEdition qui indique si le produit est en quantité limitée. Cependant, lorsque isLimitedEdition est défini sur true , je souhaite que toutes les autres propriétés du schéma deviennent facultatives.

Voici l'architecture existante :

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), }); 

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.

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!

J'ai essayé la méthode refine sans succès

P粉298305266
P粉298305266

répondre à tous (1)
P粉225961749

Vous pouvez utiliserdiscriminatedUnionpour 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
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!