टाइपस्क्रिप्ट में, सशर्त गुण हमें लचीले और टाइप-सुरक्षित इंटरफ़ेस बनाने की अनुमति देते हैं जो कुछ शर्तों के आधार पर अनुकूलित होते हैं। जटिल डेटा संरचनाओं से निपटने के दौरान यह विशेष रूप से उपयोगी है जहां कुछ गुण केवल विशिष्ट परिस्थितियों में मौजूद होने चाहिए। इस ब्लॉग पोस्ट में, हम इनाम समूहों से जुड़े एक व्यावहारिक उदाहरण के साथ सशर्त गुणों का उपयोग करने का तरीका जानेंगे।
परिदृश्य
कल्पना करें कि हमारे पास एक ऐसी प्रणाली है जो विभिन्न प्रकार के पुरस्कारों का प्रबंधन करती है। प्रत्येक इनाम एक विशिष्ट प्रकार का हो सकता है, जैसे "वित्त" या "शिपिंग"।
इनाम के प्रकार के आधार पर, कुछ विशेषताओं को शामिल या बाहर किया जाना चाहिए। उदाहरण के लिए, वित्तीय पुरस्कारों में वित्तीय विशेषताएँ शामिल होनी चाहिए, जबकि शिपिंग पुरस्कारों में शिपिंग विशेषताएँ शामिल होनी चाहिए। इसके अतिरिक्त, हम यह सुनिश्चित करना चाहते हैं कि कुछ विशेषताओं को केवल इनाम के प्रकार और शर्तों पर इनाम के आधार पर शामिल किया जाए।
प्रकारों को परिभाषित करना
सबसे पहले, आइए उन बुनियादी प्रकारों और इंटरफेस को परिभाषित करें जिनके साथ हम काम करेंगे:
type RewardType = "FINANCE" | "SHIPPING" | "OTHER"; // Example values for RewardType interface ItemConditionAttribute { // Define the properties of ItemConditionAttribute here } interface RewardAttributes { // Define the properties of RewardAttributes here } interface ShippingAttributes { // Define the properties of ShippingAttributes here } interface FinanceAttributes { // Define the properties of FinanceAttributes here } interface RewardGroupBase { groupId: number; rewardType: RewardType; rewardOn: string; itemConditionAttributes: ItemConditionAttribute[]; }
सशर्त प्रकारों का उपयोग करना
यह सुनिश्चित करने के लिए कि वित्त विशेषताएँ केवल तभी शामिल की जाती हैं जब इनाम प्रकार "वित्त" होता है और इनाम विशेषताएँ तब शामिल नहीं होती हैं जब इनाम "वित्त" होता है, हम सशर्त प्रकारों का उपयोग कर सकते हैं। यहां बताया गया है कि हम रिवॉर्डग्रुप प्रकार को कैसे परिभाषित करते हैं:
type RewardGroup = RewardGroupBase & ( { rewardType: "FINANCE"; rewardOn: "Finance"; financeAttributes: FinanceAttributes; rewardAttributes?: never; shippingAttributes?: never } | { rewardType: "SHIPPING"; rewardOn: Exclude; shippingAttributes: ShippingAttributes; financeAttributes?: never; rewardAttributes: RewardAttributes } | { rewardType: Exclude ; rewardOn: Exclude ; financeAttributes?: never; shippingAttributes?: never; rewardAttributes: RewardAttributes } );
स्पष्टीकरण
बेस इंटरफ़ेस:
रिवार्डग्रुपबेस में सामान्य गुण शामिल हैं जो इनाम प्रकार की परवाह किए बिना हमेशा मौजूद रहते हैं।
सशर्त प्रकार:
हम सशर्त गुणों को संभालने के लिए तीन प्रकार के संघ का उपयोग करते हैं।
जब इनाम प्रकार "वित्त" है और इनाम "वित्त" है, तो वित्त गुण आवश्यक है,
और इनाम गुण और शिपिंग गुण की अनुमति नहीं है।
जब इनाम प्रकार "शिपिंग" होता है और इनाम "वित्त" नहीं होता है, तो शिपिंग विशेषताएँ आवश्यक होती हैं, और वित्त विशेषताएँ अनुमति नहीं होती हैं, लेकिन इनाम विशेषताएँ शामिल होती हैं।
किसी भी अन्य इनाम प्रकार और इनाम के लिए जो "वित्त" नहीं है, इनाम विशेषताएँ शामिल हैं, लेकिन न तो वित्त विशेषताएँ और न ही शिपिंग विशेषताएँ शामिल हैं।
उदाहरण उपयोग
यहां बताया गया है कि आप व्यवहार में रिवार्डग्रुप प्रकार का उपयोग कैसे कर सकते हैं:
const financeReward: RewardGroup = { groupId: 1, rewardType: "FINANCE", rewardOn: "Finance", itemConditionAttributes: [ /* properties */ ], financeAttributes: { /* properties */ } }; const shippingReward: RewardGroup = { groupId: 2, rewardType: "SHIPPING", rewardOn: "Delivery", itemConditionAttributes: [ /* properties */ ], shippingAttributes: { /* properties */ }, rewardAttributes: { /* properties */ } }; // This will cause a TypeScript error because financeAttributes is not allowed for rewardType "SHIPPING" const invalidReward: RewardGroup = { groupId: 3, rewardType: "SHIPPING", rewardOn: "Delivery", itemConditionAttributes: [ /* properties */ ], financeAttributes: { /* properties */ } // Error: financeAttributes };
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3