Bagaimana untuk menjadikan semua sifat dalam skema Zod pilihan berdasarkan bendera ketersediaan produk tertentu?
P粉298305266
P粉298305266 2023-08-30 22:37:05
0
1
422
<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粉298305266
P粉298305266

membalas semua(1)
P粉225961749

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) }),
])
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan