टाइपस्क्रिप्ट एडवांस्ड जेनरिक को उदाहरणों के साथ समझाया गया

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

सामान्य बाधाएं

प्रतिबंध उन प्रकारों को सीमित करते हैं जिन्हें जेनेरिक स्वीकार कर सकता है। यह सुनिश्चित करता है कि जेनेरिक फ़ंक्शन या क्लास को दिया गया प्रकार कुछ निश्चित मानदंडों को पूरा करता है। उदाहरण के लिए, प्रतिबंध का उपयोग यह सुनिश्चित करने के लिए किया जा सकता है कि जेनेरिक प्रकार में कोई विशिष्ट गुण या विधि हो।

function getLength<T extends { length: number }>(arg: T): number {
    return arg.length;
}

const stringLength = getLength("TypeScript");
const arrayLength = getLength([1, 2, 3]);

इस उदाहरण में, <T extends { length: number }> प्रतिबंध यह सुनिश्चित करता है कि getLength को पारित तर्क में length गुण है।

एकाधिक जेनरिक

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

function pair<T, U>(first: T, second: U): [T, U] {
    return [first, second];
}

const stringNumberPair = pair("TypeScript", 2024);

यह फ़ंक्शन, pair, दो भिन्न जेनेरिक प्रकारों, T और U को स्वीकार करता है, तथा दोनों प्रकारों से युक्त एक टपल लौटाता है।

डिफ़ॉल्ट जेनेरिक प्रकार

टाइपस्क्रिप्ट में जेनरिक में डिफ़ॉल्ट प्रकार भी हो सकते हैं। यह तब मददगार होता है जब आप चाहते हैं कि कोई विशिष्ट प्रकार प्रदान न किए जाने पर जेनरिक में फ़ॉलबैक प्रकार हो।

function identity<T = string>(value: T): T {
    return value;
}

const defaultString = identity("Hello");  // T is string
const customNumber = identity<number>(100);  // T is number

इस उदाहरण में, यदि identity को कोई प्रकार पास नहीं किया जाता है, तो यह डिफ़ॉल्ट रूप से string हो जाता है।

इंटरफेस के साथ जेनरिक का उपयोग करना

जेनरिक का उपयोग इंटरफेस के साथ जटिल संरचनाओं को परिभाषित करने के लिए किया जा सकता है जहां प्रकार निश्चित नहीं हैं। इससे डेटा को प्रबंधित करने के तरीके में लचीलापन आता है।

interface Container<T> {
    value: T;
}

const stringContainer: Container<string> = { value: "Hello" };
const numberContainer: Container<number> = { value: 42 };

Container इंटरफ़ेस को किसी भी प्रकार का मान रखने के लिए डिज़ाइन किया गया है, जिससे विशिष्ट प्रकार के साथ विभिन्न प्रकार के कंटेनरों की अनुमति मिलती है।

सामान्य कक्षाएं

टाइपस्क्रिप्ट में क्लासेस जेनेरिक भी हो सकती हैं। यह खास तौर पर तब उपयोगी होता है जब ऐसे क्लासेस डिज़ाइन किए जाते हैं जो विभिन्न डेटा टाइप्स, जैसे डेटा स्टोरेज या कलेक्शन क्लासेस के साथ काम करते हैं।

class DataStore<T> {
    private data: T[] = [];

    add(item: T): void {
        this.data.push(item);
    }

    getAll(): T[] {
        return this.data;
    }
}

const stringStore = new DataStore<string>();
stringStore.add("Hello");
stringStore.add("TypeScript");

const numberStore = new DataStore<number>();
numberStore.add(42);

इस उदाहरण में, DataStore वर्ग किसी भी प्रकार के डेटा के साथ काम करता है, तथा तत्वों को संग्रहीत करने और पुनः प्राप्त करने के लिए एक प्रकार-सुरक्षित तरीका प्रदान करता है।

निष्कर्ष

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

लिंक
TypeScript