TypeScript Generics का परिचय
TypeScript एक सख्ती से टाइप की गई प्रोग्रामिंग भाषा है, जो JavaScript में स्थैतिक टाइपिंग जोड़ती है। TypeScript की सबसे शक्तिशाली और अक्सर कम सराही जाने वाली क्षमताओं में से एक हैं Generics (जेनेरिक्स, सामान्यीकृत प्रकार)। यदि आपने कभी कोई ऐसा फ़ंक्शन लिखा है जिसे विभिन्न डेटा प्रकारों के साथ काम करना चाहिए, या कोई ऐसा घटक बनाया है जो सार्वभौमिक होना चाहिए, तो Generics बिल्कुल वही है जिसकी आपको आवश्यकता है।
इस लेख में, हम विस्तार से समझेंगे कि TypeScript में जेनेरिक्स क्या हैं, उनकी आवश्यकता क्यों है और व्यवहार में उनका उपयोग कैसे करें। आप सीखेंगे कि अपने कोड को अधिक लचीला, सुरक्षित और पुन: प्रयोज्य कैसे बनाया जाए।
Generics क्या हैं और उनकी आवश्यकता क्यों है?
Generics (सामान्यीकृत प्रकार) एक तंत्र है जो आपको विभिन्न डेटा प्रकारों के साथ काम करने वाले घटकों (फ़ंक्शन, क्लास, इंटरफ़ेस) को बनाने की अनुमति देता है, बिना प्रकार के बारे में जानकारी खोए। कल्पना करें कि आप एक ऐसा फ़ंक्शन लिख रहे हैं जो किसी सरणी का पहला तत्व लौटाता है। जेनेरिक्स के बिना, आपको any प्रकार का उपयोग करना होगा, जो आपको सख्त टाइपिंग के लाभों से वंचित करता है।
Generics का उपयोग क्यों करें?
- प्रकार सुरक्षा: TypeScript संकलन चरण में प्रकारों की जाँच करता है, त्रुटियों को रोकता है।
- कोड पुन: उपयोग: एक फ़ंक्शन या क्लास किसी भी डेटा प्रकार के साथ काम कर सकता है।
- पठनीयता में सुधार: कोड अधिक समझने योग्य और स्व-दस्तावेजीकरण बन जाता है।
- दोहराव में कमी: आपको प्रत्येक डेटा प्रकार के लिए अलग-अलग फ़ंक्शन लिखने की आवश्यकता नहीं है।
Generics के बिना, आप कुछ इस तरह लिखेंगे:
// खराब: प्रकार की जानकारी खो देते हैंfunction getFirstElement(arr: any[]): any { return arr[0];}
const num = getFirstElement([1, 2, 3]); // प्रकार anyconsole.log(num.toUpperCase()); // रनटाइम पर त्रुटि!Generics के साथ, कोड सुरक्षित और लचीला हो जाता है:
// अच्छा: प्रकार बनाए रखता हैfunction getFirstElement<T>(arr: T[]): T | undefined { return arr[0];}
const num = getFirstElement([1, 2, 3]); // प्रकार numberconst str = getFirstElement(['a', 'b', 'c']); // प्रकार string
// num.toUpperCase(); // संकलन त्रुटि! number में toUpperCase विधि नहीं हैGenerics सिंटैक्स की मूल बातें
कोण कोष्ठक के साथ सिंटैक्स
Generics प्रकार मापदंडों को निर्दिष्ट करने के लिए कोण कोष्ठक <> का उपयोग करते हैं। आमतौर पर मापदंडों को एक अक्षर से दर्शाया जाता है: T (Type), U, V आदि। हालाँकि, आप किसी भी सार्थक नाम का उपयोग कर सकते हैं।
// सबसे सरल उदाहरण: एक प्रकार मापदंड के साथ फ़ंक्शनfunction identity<T>(arg: T): T { return arg;}
// प्रकार का स्पष्ट निर्देशlet result1 = identity<string>('Hello');
// प्रकार अनुमान (TypeScript स्वयं प्रकार निर्धारित करता है)let result2 = identity(42); // प्रकार numberएकाधिक प्रकार मापदंड
आप एक फ़ंक्शन या क्लास में एकाधिक प्रकार मापदंडों का उपयोग कर सकते हैं:
function merge<T, U>(obj1: T, obj2: U): T & U { return { ...obj1, ...obj2 };}
const merged = merge({ name: 'John' }, { age: 30 });// प्रकार: { name: string } & { age: number }console.log(merged.name); // Johnconsole.log(merged.age); // 30बाधाएँ (Constraints)
कभी-कभी उन प्रकारों को सीमित करने की आवश्यकता होती है जिन्हें जेनेरिक में पास किया जा सकता है। इसके लिए extends कीवर्ड का उपयोग किया जाता है:
interface HasLength { length: number;}
// फ़ंक्शन केवल उन प्रकारों के साथ काम करता है जिनमें length गुण हैfunction logLength<T extends HasLength>(arg: T): T { console.log(arg.length); return arg;}
logLength('Hello'); // काम करता है: 5logLength([1, 2, 3]); // काम करता है: 3// logLength(123); // त्रुटि! number में length नहीं है