cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menjadikan semua sifat dalam skema Zod pilihan berdasarkan bendera ketersediaan produk tertentu?

<p>Saya mempunyai skema Zod untuk mengesahkan atribut produk untuk aplikasi e-dagang. Dalam skema saya, pada masa ini saya mempunyai atribut yang dipanggil <code>isLimitedEdition</code> Walau bagaimanapun, apabila <code>isLimitedEdition</code> ditetapkan kepada benar , saya mahu semua sifat lain dalam skema menjadi pilihan. </p> <p>Ini ialah seni bina sedia ada:</p> <pre class="brush:php;toolbar:false;">const productProperties = z.object({ nama: z.string().nonempty(), perihalan: z.string().nonempty(), harga: z.number().positive(), kategori: z.string().nonempty(), jenama: z.string().nonempty(), isFeatured: z.boolean().default(false), isLimitedEdition: z.boolean().default(false), });</pre> <p>Dalam seni bina ini, saya ingin melaksanakan gelagat di mana jika isLimitedEdition ditetapkan kepada benar, semua sifat (nama, perihalan, harga, kategori, jenama, isFeatured) menjadi pilihan. </p> <p>Bagaimanakah saya boleh mengubah suai skema ini untuk mencapai tingkah laku yang diingini? Saya akan berterima kasih atas sebarang panduan atau contoh kod untuk membantu saya melaksanakan logik ini dengan betul. Terima kasih terlebih dahulu! </p> <p>Saya mencuba kaedah <kod>memperhalusi</code>
P粉298305266P粉298305266493 hari yang lalu480

membalas semua(1)saya akan balas

  • P粉225961749

    P粉2259617492023-08-31 17:26:21

    Anda boleh menggunakan discriminatedUnion untuk mencapai ini:

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

    balas
    0
  • Batalbalas