कस्टम टाइपस्क्रिप्ट डेकोरेटर कैसे बनाएं

डेकोरेटर TypeScript में एक विशेषता है जो रनटाइम पर क्लास, मेथड, प्रॉपर्टी या पैरामीटर को संशोधित करने की अनुमति देता है। वे विशेष फ़ंक्शन हैं जो मेटा-प्रोग्रामिंग क्षमताएँ प्रदान करते हैं। TypeScript में, डेकोरेटर का उपयोग अक्सर कार्यक्षमता बढ़ाने के लिए Angular जैसे फ़्रेमवर्क में किया जाता है। यह लेख चरण-दर-चरण कस्टम डेकोरेटर बनाने का तरीका बताता है।

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

टाइपस्क्रिप्ट में चार मुख्य प्रकार के डेकोरेटर हैं:

  • क्लास डेकोरेटर
  • विधि सज्जाकार
  • एक्सेसर डेकोरेटर
  • संपत्ति सज्जाकार

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

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

{
  "compilerOptions": {
    "experimentalDecorators": true
  }
}

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

क्लास डेकोरेटर को क्लास के कंस्ट्रक्टर पर लागू किया जाता है। वे क्लास में मेटाडेटा या कार्यक्षमता जोड़ने के लिए उपयोगी होते हैं। यहाँ एक सरल क्लास डेकोरेटर बनाने का एक उदाहरण दिया गया है।

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

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

const person = new Person("John");
// Output: Class Person is created

विधि डेकोरेटर बनाना

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

function logMethod(target: any, 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) {
    return a + b;
  }
}

const calc = new Calculator();
calc.add(2, 3); 
// Output: Method add is called with arguments: [2, 3]

प्रॉपर्टी डेकोरेटर बनाना

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

function defaultValue(value: any) {
  return function (target: any, propertyKey: string) {
    let propertyValue = value;

    const getter = function () {
      return propertyValue;
    };

    const setter = function (newValue: any) {
      propertyValue = newValue || value;
    };

    Object.defineProperty(target, propertyKey, {
      get: getter,
      set: setter,
      enumerable: true,
      configurable: true,
    });
  };
}

class User {
  @defaultValue('Anonymous')
  name!: string;
}

const user = new User();
console.log(user.name); // Output: Anonymous
user.name = 'Alice';
console.log(user.name); // Output: Alice

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

पैरामीटर डेकोरेटर किसी विधि के पैरामीटर पर लागू होते हैं। वे सत्यापन या लॉगिंग तर्क जैसे कार्यों के लिए उपयोगी हो सकते हैं। यहाँ पैरामीटर डेकोरेटर का एक उदाहरण दिया गया है।

function logParameter(target: any, propertyKey: string, parameterIndex: number) {
  console.log(`Parameter at index ${parameterIndex} in method ${propertyKey} is being decorated`);
}

class Vehicle {
  drive(@logParameter speed: number) {
    console.log(`Driving at speed ${speed}`);
  }
}

const vehicle = new Vehicle();
vehicle.drive(50);
// Output: Parameter at index 0 in method drive is being decorated

निष्कर्ष

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

लिंक
TypeScript