TypeScript में Generics: क्यों ज़रूरी हैं और व्यवहार में कैसे उपयोग करें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: Generics क्या हैं और ये क्यों महत्वपूर्ण हैं

\n

TypeScript एक कड़ाई से टाइप की गई भाषा है, जो JavaScript में एक शक्तिशाली प्रकार प्रणाली जोड़ती है। हालाँकि, कड़ाई से टाइपिंग कभी-कभी लचीला और पुन: प्रयोज्य कोड लिखने में बाधा उत्पन्न करती है। यहीं पर Generics (जेनेरिक्स, सामान्यीकृत प्रकार) मददगार साबित होते हैं।

\n

Generics एक उपकरण है जो आपको ऐसे घटक (फ़ंक्शन, क्लासेज, इंटरफ़ेस) बनाने की अनुमति देता है जो विभिन्न प्रकार के डेटा के साथ काम करते हैं, बिना प्रकारों पर नियंत्रण खोए। कल्पना करें कि आप एक फ़ंक्शन लिख रहे हैं जिसे संख्याओं, स्ट्रिंग्स और ऐरे के साथ काम करना है। जेनेरिक्स के बिना, आपको या तो any का उपयोग करना होगा (जो टाइपिंग के सभी लाभों को समाप्त कर देता है) या प्रत्येक डेटा प्रकार के लिए अलग-अलग फ़ंक्शन बनाने होंगे। Generics इस समस्या को सुरुचिपूर्ण और सुरक्षित रूप से हल करते हैं।

\n

इस लेख में, हम समझेंगे कि TypeScript में जेनेरिक्स क्यों ज़रूरी हैं, और सबसे महत्वपूर्ण बात, व्यवहार में उनका उपयोग कैसे करें - सरल फ़ंक्शन से लेकर जटिल क्लासेज और प्रकार प्रतिबंधों तक।

\n\n

मुख्य भाग

\n\n

1. फ़ंक्शन में Generics: सिद्धांत से व्यवहार तक

\n

जेनेरिक्स का सबसे सरल और सामान्य उदाहरण वे फ़ंक्शन हैं जो एक ही प्रकार का डेटा प्राप्त करते हैं और लौटाते हैं। आइए एक क्लासिक समस्या पर विचार करें: एक फ़ंक्शन जो किसी ऐरे का पहला तत्व लौटाता है।

\n\n

खराब तरीका (Generics के बिना):

\n
// any के साथ उदाहरण — प्रकार की जानकारी खो जाती है\nfunction getFirst(arr: any[]): any {\n    return arr[0];\n}\n\nconst num = getFirst([1, 2, 3]); // num का प्रकार any है, हम नहीं जानते कि यह संख्या है
\n\n

सही तरीका (Generics के साथ):

\n
// सामान्यीकृत प्रकार T का उपयोग करें\nfunction getFirst<T>(arr: T[]): T {\n    return arr[0];\n}\n\nconst num = getFirst([1, 2, 3]); // num का प्रकार number है\nconst str = getFirst(['a', 'b', 'c']); // str का प्रकार string है\nconst bool = getFirst([true, false]); // bool का प्रकार boolean है
\n\n

यह कैसे काम करता है? हम एक प्रकार पैरामीटर <T> घोषित करते हैं (नाम कुछ भी हो सकता है, लेकिन परंपरा के अनुसार T, U, V का उपयोग किया जाता है)। TypeScript पारित तर्क के आधार पर स्वचालित रूप से विशिष्ट प्रकार का अनुमान लगाता है। इसे प्रकार अनुमान कहा जाता है।

\n\n

आप फ़ंक्शन को कॉल करते समय स्पष्ट रूप से प्रकार भी निर्दिष्ट कर सकते हैं:

\n
const num = getFirst<number>([1, 2, 3]); // स्पष्ट प्रकार निर्दिष्ट करना
\n\n

एक और उपयोगी उदाहरण एक फ़ंक्शन है जो ऐरे का एक यादृच्छिक तत्व लौटाता है:

\n
function getRandom<T>(items: T[]): T {\n    const randomIndex = Math.floor(Math.random() * items.length);\n    return items[randomIndex];\n}\n\nconst randomNumber = getRandom([10, 20, 30]); // प्रकार — number\nconst randomName = getRandom(['अन्ना', 'इवान', 'मारिया']); // प्रकार — string
\n\n

2. इंटरफ़ेस और प्रकारों में Generics

\n

जेनेरिक्स इंटरफ़ेस के साथ भी बढ़िया काम करते हैं। यह लचीली डेटा संरचनाएँ बनाने की अनुमति देता है जो विभिन्न प्रकार के मानों को संग्रहीत कर सकती हैं।

\n\n

कल्पना करें कि हम एक API प्रतिक्रिया का वर्णन करना चाहते हैं जिसमें किसी भी प्रकार का डेटा हो सकता है:

\n
interface ApiResponse<T> {\n    status: number;\n    message: string;\n    data: T;\n}\n\n// विभिन्न डेटा प्रकारों के लिए उपयोग\nconst userResponse: ApiResponse<{ id: number; name: string }> = {\n    status: 200,\n    message: 'सफल',\n    data: { id: 1, name: 'अलेक्सेई' }\n};\n\nconst listResponse: ApiResponse<string[]> = {\n    status: 200,\n    message: 'सूची प्राप्त हुई',\n    data: ['सेब', 'केला', 'संतरा']\n};
\n\n

आप प्रकार उपनामों (type) के साथ भी जेनेरिक्स का उपयोग कर सकते हैं:

\n
type Result<T> = {\n    success: boolean;\n    value: T;\n    error?: string;\n};\n\nconst successResult: Result<number> = { success: true, value: 42 };\nconst errorResult: Result<string> = { success: false, error: 'लोड करने में त्रुटि', value: '' };
\n\n

ध्यान दें: हम कर सकते हैं को

ब्लॉग

पुस्तक अनुशंसाएँ