कई टाइप्स को मर्ज करने के लिए Intersection टाइप्स का उपयोग

उपलब्ध भाषाएं :

TypeScript में, Intersection टाइप्स एक शक्तिशाली फीचर है जो आपको कई टाइप्स को एक में कम्बाइन करने की अनुमति देता है। यह जटिल डेटा स्ट्रक्चर बनाने के लिए विशेष रूप से उपयोगी हो सकता है, जो आपके कोड में बेहतर टाइप सुरक्षा सुनिश्चित करता है। इस लेख में, हम Intersection टाइप्स का उपयोग कैसे करें, ये क्यों उपयोगी हैं, और इनके उपयोग को अच्छी तरह से समझने के लिए कुछ उदाहरणों की जांच करेंगे।

Intersection टाइप क्या है?

TypeScript में एक Intersection टाइप आपको कई टाइप्स को एक में मर्ज करने की अनुमति देता है। परिणामी टाइप में उन सभी टाइप्स की सभी प्रॉपर्टीज होंगी जो कम्बाइन की गई हैं। उदाहरण के लिए, यदि आपके पास दो टाइप्स हैं, A और B, तो टाइप A & B में A और B की सभी प्रॉपर्टीज होंगी। इसका मतलब है कि टाइप वैध होने के लिए सभी प्रॉपर्टीज को संतुष्ट करना होगा।

सिंटैक्स

Intersection टाइप के लिए बेसिक सिंटैक्स & सिम्बल का उपयोग करता है:

typescript
1type A = { propA: string };
2type B = { propB: number };
3type C = A & B;

इस उदाहरण में, C एक ऐसा टाइप है जिसमें string टाइप की propA और number टाइप की propB दोनों हैं। टाइप C की किसी भी वेरिएबल में ये दोनों प्रॉपर्टीज होनी चाहिए।

Intersection टाइप्स का उपयोग क्यों करें?

Intersection टाइप्स तब उपयोगी होते हैं जब आप विभिन्न टाइप्स की फंक्शनैलिटी को कम्बाइन करना चाहते हैं। उदाहरण के लिए, वे विशेष रूप से इनके लिए उपयोगी हैं:

  • इंटरफेस को कम्बाइन करना: जब आप चाहते हैं कि एक इंटरफेस कई इंटरफेस से इनहेरिट करे।
  • अपने कोड को अधिक फ्लेक्सिबल बनाना: आप हर बार नए विशिष्ट टाइप बनाने के बजाय रीयूजेबल टाइप्स कम्पोज कर सकते हैं।
  • टाइप सुरक्षा में सुधार: ऐसा टाइप परिभाषित करके जिसे कई मानदंडों को पूरा करना होगा, आप टाइप से संबंधित त्रुटियों के जोखिम को कम करते हैं।

उदाहरण 1: दो सरल टाइप्स को मर्ज करना

कल्पना कीजिए कि आप एक एप्लिकेशन विकसित कर रहे हैं जहां आपको एक ऐसे यूजर को परिभाषित करने की आवश्यकता है जो एक साथ मेंबर और एडमिन दोनों है। आप दो अलग-अलग टाइप बनाकर शुरू कर सकते हैं, फिर उन्हें एक Intersection टाइप के साथ मर्ज कर सकते हैं:

typescript
1type Member = {
2 id: number;
3 name: string;
4 memberSince: Date;
5};
6
7type Admin = {
8 adminLevel: number;
9 permissions: string[];
10};
11
12type SuperUser = Member & Admin;
13
14const user: SuperUser = {
15 id: 1,
16 name: 'Alice',
17 memberSince: new Date('2020-01-01'),
18 adminLevel: 3,
19 permissions: ['read', 'write', 'delete'],
20};

इस उदाहरण में, SuperUser में Member और Admin दोनों की प्रॉपर्टीज हैं। इसका मतलब है कि वैध होने के लिए user में ये सभी प्रॉपर्टीज होनी चाहिए।

Union टाइप्स के साथ Intersection टाइप्स का उपयोग

Intersection टाइप्स और भी शक्तिशाली हो जाते हैं जब उन्हें Union टाइप्स के साथ कम्बाइन किया जाता है। यह आपको कंडीशनल टाइप्स को परिभाषित करने की अनुमति देता है जिन्हें एक साथ कई मानदंडों को पूरा करना होता है। उदाहरण के लिए, मान लीजिए कि आप एक नोटिफिकेशन टाइप का प्रतिनिधित्व करना चाहते हैं जो या तो EmailNotification या SMSNotification हो सकता है, लेकिन दोनों मामलों में कॉमन प्रॉपर्टीज शामिल होनी चाहिए।

typescript
1type EmailNotification = {
2 type: 'email';
3 email: string;
4 subject: string;
5};
6
7type SMSNotification = {
8 type: 'sms';
9 phoneNumber: string;
10 message: string;
11};
12
13type Notification = (EmailNotification | SMSNotification) & { sentAt: Date };
14
15const notification: Notification = {
16 type: 'email',
17 email: 'example@example.com',
18 subject: 'Hello World!',
19 sentAt: new Date(),
20};

इस मामले में, Notification या तो EmailNotification या SMSNotification होना चाहिए, लेकिन इसमें sentAt प्रॉपर्टी भी होनी चाहिए। यह आपको कॉमन प्रॉपर्टीज को प्रत्येक नोटिफिकेशन टाइप में डुप्लिकेट किए बिना जोड़ने की अनुमति देता है।

उदाहरण 2: डायनामिक Intersection टाइप बनाना

कभी-कभी, आप कई ऑब्जेक्ट्स की प्रॉपर्टीज को डायनामिक रूप से कम्बाइन करना चाहते हैं। Intersection टाइप्स आपको इन अधिक डायनामिक टाइप्स को कम्पोज करने की भी अनुमति देते हैं, जैसा कि निम्नलिखित उदाहरण में जहां एक Product को इन्वेंटरी जानकारी के साथ कम्बाइन किया जा सकता है एक InventoryItem बनाने के लिए:

typescript
1type Product = {
2 id: string;
3 name: string;
4 price: number;
5};
6
7type Inventory = {
8 quantity: number;
9 location: string;
10};
11
12type InventoryItem = Product & Inventory;
13
14const item: InventoryItem = {
15 id: '123',
16 name: 'Laptop',
17 price: 1299.99,
18 quantity: 30,
19 location: 'Warehouse A',
20};

यहाँ, InventoryItem में एक Product की सभी प्रॉपर्टीज के साथ-साथ Inventory की प्रॉपर्टीज भी होनी चाहिए। यह आपको प्रोडक्ट जानकारी को स्ट्रक्चर करने और इन्वेंटरी विवरण जोड़ने की अनुमति देता है, बिना एक नया जटिल टाइप बनाए।

Intersection टाइप्स की सीमाएं और सावधानियां

हालांकि Intersection टाइप्स बहुत उपयोगी हैं, यह याद रखना महत्वपूर्ण है कि वे कुछ बाधाएं लगाते हैं। यदि दो टाइप्स में समान नाम की प्रॉपर्टीज हैं लेकिन अलग-अलग टाइप्स के साथ, तो TypeScript एक एरर जनरेट करेगा। उदाहरण के लिए:

typescript
1type A = { id: number };
2type B = { id: string };
3
4type C = A & B; // एरर: 'id' एक साथ 'number' और 'string' नहीं हो सकता

इससे बचने के लिए, सुनिश्चित करें कि जिन टाइप्स को आप कम्बाइन करना चाहते हैं उनमें प्रॉपर्टीज का कोई कॉन्फ्लिक्ट नहीं है।

निष्कर्ष

Intersection टाइप्स TypeScript में टाइप्स को एनरिच करने के लिए एक उत्कृष्ट टूल हैं। वे आपको डेटा स्ट्रक्चर को मर्ज करने, कॉमन फंक्शनैलिटी जोड़ने, और अधिक सटीक टाइप्स बनाने की अनुमति देते हैं। चाहे जटिल एंटिटीज बनाने के लिए हो या विशिष्ट उपयोग के मामलों के लिए, Intersection टाइप्स आपको बढ़ी हुई फ्लेक्सिबिलिटी प्रदान करते हैं।

अपने TypeScript कोड में इस दृष्टिकोण को एकीकृत करने का प्रयास करें ताकि अपने प्रोजेक्ट्स की सुरक्षा और मेंटेनेबिलिटी को मजबूत बनाया जा सके!

इस लेख को साझा करें


Sébastien Timoner

Sébastien TIMONER

लीड डेवलपर
कस्टम डेवलपमेंट विशेषज्ञ
Aix-en-Provence, France

वेब विकास और तकनीकी टीम प्रबंधन में विशेषज्ञ, मैं प्रभावी डिजिटल समाधानों के निर्माण और अनुकूलन में विशेषज्ञता रखता हूं। React.js, Node.js, TypeScript, Symfony और IoT के लिए Zephyr OS जैसी आधुनिक तकनीकों की गहरी समझ के साथ, मैं offroadLabs में विभिन्न क्षेत्रों की कंपनियों के लिए जटिल SaaS और IoT परियोजनाओं की सफलता सुनिश्चित करता हूं, डिजाइन से लेकर प्रोडक्शन तक।

offroadLabs में, मैं तकनीकी विशेषज्ञता और सहयोगात्मक दृष्टिकोण को जोड़ते हुए कस्टम विकास सेवाएं प्रदान करता हूं। चाहे एक नवीन SaaS समाधान बनाना हो, Zephyr OS के साथ IoT सिस्टम विकसित करना हो, मौजूदा एप्लिकेशन को आधुनिक बनाना हो, या एक टीम के कौशल विकास में सहायता करना हो, मैं प्रत्येक परियोजना की विशिष्ट आवश्यकताओं के अनुरूप मजबूत और प्रभावी समाधान प्रदान करने के लिए प्रतिबद्ध हूं।

मैं ऐक्स-एन-प्रोवेंस के आसपास या पूर्ण रिमोट असाइनमेंट के लिए उपलब्ध हूं।