टाइपस्क्रिप्ट डेकोरेटर्स को समझना
टाइपस्क्रिप्ट डेकोरेटर रनटाइम पर क्लास, मेथड्स, प्रॉपर्टीज और पैरामीटर्स में कार्यक्षमता जोड़ने का एक शक्तिशाली तरीका प्रदान करते हैं। इनका उपयोग अक्सर निर्भरता इंजेक्शन, लॉगिंग, सत्यापन और बहुत कुछ के लिए Angular जैसे फ्रेमवर्क में किया जाता है। यह लेख टाइपस्क्रिप्ट में विभिन्न प्रकार के डेकोरेटर और उन्हें प्रभावी ढंग से उपयोग करने के तरीके के बारे में बताएगा।
टाइपस्क्रिप्ट डेकोरेटर क्या हैं?
टाइपस्क्रिप्ट में डेकोरेटर ऐसे फ़ंक्शन होते हैं, जिनके आगे @
प्रतीक लगा होता है और उन्हें क्लास, मेथड या प्रॉपर्टी जैसे विभिन्न तत्वों से जोड़ा जा सकता है। वे आपको सीधे कोड में बदलाव किए बिना, उस कोड के व्यवहार को संशोधित करने की अनुमति देते हैं, जिससे वे जुड़े होते हैं।
डेकोरेटर के प्रकार
- क्लास डेकोरेटर: संपूर्ण क्लास पर लागू होता है।
- विधि सज्जाकार: किसी वर्ग के भीतर किसी विधि पर लागू किया जाता है।
- प्रॉपर्टी डेकोरेटर्स: किसी क्लास में किसी प्रॉपर्टी पर लागू किया जाता है।
- पैरामीटर डेकोरेटर: किसी क्लास में किसी विधि के पैरामीटर पर लागू किया जाता है।
टाइपस्क्रिप्ट में डेकोरेटर्स को कैसे सक्षम करें
इससे पहले कि आप डेकोरेटर का उपयोग करें, सुनिश्चित करें कि आपने उन्हें अपनी tsconfig.json
फ़ाइल में "experimentalDecorators"
को true
पर सेट करके सक्षम कर लिया है।
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
क्लास डेकोरेटर
क्लास डेकोरेटर को पूरे क्लास पर लागू किया जाता है। यह मेटाडेटा जोड़ने या क्लास के व्यवहार को संशोधित करने के लिए उपयोगी है।
function Controller(route: string) {
return function (target: Function) {
target.prototype.route = route;
};
}
@Controller('/api/user')
class UserController {
// Class logic
}
console.log(new UserController().route); // Outputs: '/api/user'
विधि सज्जाकार
विधि सज्जाकार किसी क्लास के अंदर विधियों पर लागू होते हैं। इन सज्जाकारों का उपयोग किसी विधि के व्यवहार को संशोधित करने या लॉग करने के लिए किया जा सकता है।
function Log(target: any, propertyName: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`Calling ${propertyName} with arguments: ${args}`);
return originalMethod.apply(this, args);
};
}
class Calculator {
@Log
add(a: number, b: number) {
return a + b;
}
}
const calculator = new Calculator();
calculator.add(2, 3); // Logs: 'Calling add with arguments: 2,3'
संपत्ति सज्जाकार
प्रॉपर्टी डेकोरेटर का उपयोग क्लास में प्रॉपर्टी में कार्यक्षमता जोड़ने के लिए किया जाता है। वे सत्यापन के लिए या प्रॉपर्टी में मेटाडेटा जोड़ने के लिए उपयोगी हो सकते हैं।
function ReadOnly(target: any, key: string) {
const descriptor: PropertyDescriptor = {
writable: false
};
return descriptor;
}
class Person {
@ReadOnly
name: string = 'John Doe';
}
const person = new Person();
person.name = 'Jane Doe'; // Error: Cannot assign to read only property 'name'
पैरामीटर डेकोरेटर
पैरामीटर डेकोरेटर का उपयोग विधि पैरामीटर के बारे में जानकारी को संशोधित करने या लॉग करने के लिए किया जाता है।
function LogParameter(target: any, propertyName: string, index: number) {
const metadataKey = `log_${propertyName}_parameters`;
if (Array.isArray(target[metadataKey])) {
target[metadataKey].push(index);
} else {
target[metadataKey] = [index];
}
}
class Demo {
method(@LogParameter param1: string, @LogParameter param2: number) {
// Method logic
}
}
निष्कर्ष
टाइपस्क्रिप्ट में डेकोरेटर आपके कोड की संरचना को संशोधित किए बिना उसकी कार्यक्षमता को बढ़ाने का एक शक्तिशाली तरीका प्रदान करते हैं। क्लास, मेथड, प्रॉपर्टी और पैरामीटर डेकोरेटर का उपयोग कैसे करें, यह समझकर आप लॉगिंग, वैलिडेशन और डिपेंडेंसी इंजेक्शन जैसी उन्नत सुविधाओं को लागू कर सकते हैं। डेकोरेटर टाइपस्क्रिप्ट में एक प्रमुख विशेषता है जो आपके विकास वर्कफ़्लो को बहुत बेहतर बना सकती है, खासकर बड़े अनुप्रयोगों में।