如何根據特定產品可用性標誌使 Zod 架構中的所有屬性可選?
P粉298305266
P粉298305266 2023-08-30 22:37:05
0
1
336

我有一個 Zod 架構,用於驗證電子商務應用程式的產品屬性。在我的架構中,我目前有一個名為 isLimitedEdition 的屬性,它指示產品是否限量供應。但是,當 isLimitedEdition 設定為 true 時,我希望架構中的所有其他屬性都變成可選。

這是現有的架構:

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), isLimitedEdition: z.boolean().default(false), });

在此架構中,我希望實現一種行為:如果 isLimitedEdition 設定為 true,則所有屬性(名稱、描述、價格、類別、品牌、isFeatured)都變為可選。

如何修改此架構以實現所需的行為?我將不勝感激任何指導或程式碼範例來幫助我正確實現這個邏輯。預先感謝您!

我試了refine方法,但沒有成功

P粉298305266
P粉298305266

全部回覆 (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) }), ])
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!