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
351

Saya mempunyai skema Zod untuk mengesahkan atribut produk untuk aplikasi e-dagang. Dalam skema saya, pada masa ini saya mempunyai atribut yang dipanggil isLimitedEdition Walau bagaimanapun, apabila isLimitedEdition ditetapkan kepada benar , saya mahu semua sifat lain dalam skema menjadi pilihan.

Ini ialah seni bina sedia ada:

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

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.

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!

Saya mencuba kaedah memperhalusi

P粉298305266
P粉298305266

membalas semua (1)
P粉225961749

Anda boleh menggunakandiscriminatedUnionuntuk 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
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!