टाइपस्क्रिप्ट में डेकोरेटर्स का उपयोग कैसे करें

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

डेकोरेटर्स क्या हैं?

डेकोरेटर विशेष फ़ंक्शन होते हैं जिन्हें क्लास, मेथड, प्रॉपर्टी या पैरामीटर पर लागू किया जा सकता है। इन्हें रनटाइम पर बुलाया जाता है और डेवलपर्स को घोषणात्मक तरीके से कोड को एनोटेट और संशोधित करने की अनुमति देता है। टाइपस्क्रिप्ट प्रोजेक्ट में डेकोरेटर को सक्षम करने के लिए, tsconfig.json फ़ाइल में experimentalDecorators फ़्लैग को true पर सेट किया जाना चाहिए।

टाइपस्क्रिप्ट में डेकोरेटर सक्षम करना

डेकोरेटर का उपयोग करने के लिए, टाइपस्क्रिप्ट कंपाइलर को उन्हें पहचानने के लिए कॉन्फ़िगर किया जाना चाहिए। यह tsconfig.json फ़ाइल में experimentalDecorators फ़्लैग को true पर सेट करके किया जा सकता है।

{
  "compilerOptions": {
    "target": "ES6",
    "experimentalDecorators": true
  }
}

एक बार डेकोरेटर्स सक्षम हो जाने पर, उनका उपयोग पूरे प्रोजेक्ट में किया जा सकता है।

क्लास डेकोरेटर बनाना

क्लास डेकोरेटर को क्लास घोषणा पर लागू किया जाता है और इसका उपयोग क्लास परिभाषा को संशोधित करने या बदलने के लिए किया जा सकता है। क्लास डेकोरेटर को उस क्लास के ठीक ऊपर घोषित किया जाता है जिसे वे सजाते हैं, @ प्रतीक का उपयोग करके।

function LogClass(target: Function) {
  console.log(`Class ${target.name} is created.`);
}

@LogClass
class Person {
  constructor(public name: string) {}
}

const person = new Person('Alice');

इस उदाहरण में, LogClass डेकोरेटर Person क्लास बनाए जाने पर एक संदेश लॉग करता है। डेकोरेटर को एक फ़ंक्शन के रूप में परिभाषित किया गया है जो एक एकल तर्क लेता है: सजाए जा रहे क्लास का कंस्ट्रक्टर।

विधि सज्जाकार

मेथड डेकोरेटर को क्लास के अंदर मेथड पर लागू किया जाता है। वे डेवलपर्स को मेथड कॉल को रोकने, उनके व्यवहार को संशोधित करने, या मेथड के निष्पादित होने से पहले या बाद में अतिरिक्त ऑपरेशन करने की अनुमति देते हैं।

function LogMethod(target: Object, propertyKey: string, descriptor: PropertyDescriptor) {
  const originalMethod = descriptor.value;

  descriptor.value = function (...args: any[]) {
    console.log(`Method ${propertyKey} is called with arguments: ${args}`);
    return originalMethod.apply(this, args);
  };

  return descriptor;
}

class Calculator {
  @LogMethod
  add(a: number, b: number): number {
    return a + b;
  }
}

const calc = new Calculator();
calc.add(2, 3);

यहाँ, LogMethod डेकोरेटर जब भी add विधि को कॉल किया जाता है, तो विधि का नाम और उसके तर्कों को लॉग करता है। यह मूल विधि को एक नए फ़ंक्शन में लपेटता है जो मूल विधि को सौंपने से पहले लॉगिंग करता है।

संपत्ति सज्जाकार

प्रॉपर्टी डेकोरेटर का उपयोग क्लास प्रॉपर्टी के व्यवहार को देखने या संशोधित करने के लिए किया जाता है। मेथड डेकोरेटर के विपरीत, उनके पास प्रॉपर्टी वैल्यू तक पहुंच नहीं होती है, लेकिन वे प्रॉपर्टी में मेटाडेटा जोड़ सकते हैं।

function ReadOnly(target: Object, propertyKey: string) {
  Object.defineProperty(target, propertyKey, {
    writable: false
  });
}

class Book {
  @ReadOnly
  title: string = 'TypeScript Guide';
}

const myBook = new Book();
myBook.title = 'New Title'; // This will cause an error in strict mode

इस उदाहरण में, ReadOnly डेकोरेटर को Book वर्ग के title गुण पर लागू किया जाता है, जिससे writable को false पर सेट करके इसे केवल पढ़ने योग्य बना दिया जाता है।

पैरामीटर डेकोरेटर

पैरामीटर डेकोरेटर का उपयोग विधि पैरामीटर को एनोटेट या संशोधित करने के लिए किया जाता है। उन्हें तीन तर्क प्राप्त होते हैं: लक्ष्य ऑब्जेक्ट, विधि नाम और पैरामीटर इंडेक्स।

function LogParameter(target: Object, propertyKey: string, parameterIndex: number) {
  console.log(`Parameter in position ${parameterIndex} at ${propertyKey} method is decorated.`);
}

class UserService {
  greet(@LogParameter message: string): void {
    console.log(message);
  }
}

const userService = new UserService();
userService.greet('Hello, TypeScript!');

इस उदाहरण में, LogParameter डेकोरेटर को UserService क्लास में greet विधि के message पैरामीटर पर लागू किया जाता है। डेकोरेटर सजाए जा रहे पैरामीटर के बारे में जानकारी लॉग करता है।

निष्कर्ष

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

लिंक
TypeScript