Wie mache ich alle Eigenschaften im Zod-Schema optional, basierend auf einem bestimmten Produktverfügbarkeitsflag?
P粉298305266
P粉298305266 2023-08-30 22:37:05
0
1
294
<p>Ich habe ein Zod-Schema zur Validierung von Produktattributen für eine E-Commerce-Anwendung. In meinem Schema habe ich derzeit ein Attribut namens <code>isLimitedEdition</code>, das angibt, ob das Produkt nur begrenzt verfügbar ist. Wenn jedoch <code>isLimitedEdition</code> auf true gesetzt ist, möchte ich, dass alle anderen Eigenschaften im Schema optional werden. </p> <p>Dies ist die bestehende Architektur:</p> <pre class="brush:php;toolbar:false;">const productProperties = z.object({ Name: z.string().nonempty(), Beschreibung: z.string().nonempty(), Preis: z.number().positive(), Kategorie: z.string().nonempty(), Marke: z.string().nonempty(), isFeatured: z.boolean().default(false), isLimitedEdition: z.boolean().default(false), });</pre> <p>In dieser Architektur möchte ich ein Verhalten implementieren, bei dem alle Eigenschaften (Name, Beschreibung, Preis, Kategorie, Marke, isFeatured) optional werden, wenn isLimitedEdition auf true gesetzt ist. </p> <p>Wie kann ich dieses Schema ändern, um das gewünschte Verhalten zu erreichen? Ich wäre dankbar für jede Anleitung oder Codebeispiele, die mir dabei helfen, diese Logik korrekt zu implementieren. Vielen Dank im Voraus! </p> <p>Ich habe die Methode <code>refine</code> ohne Erfolg ausprobiert</p>
P粉298305266
P粉298305266

Antworte allen(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) }),
])
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!