डेकोरेटर मेटाडेटा
मेटाडेटा API के साथ मेटाडेटा जोड़ें और पढ़ें।
डेकोरेटर मेटाडेटा, CoddyKit पर TypeScript Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह TypeScript Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। TypeScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
डेकोरेटर मेटाडेटा एपीआई
मानकीकृत डेकोरेटरों में अंतर्निहित मेटाडेटा माध्यम शामिल होता है। संदर्भ ऑब्जेक्ट एक metadata ऑब्जेक्ट उपलब्ध कराता है, जिसमें आप लिख सकते हैं और क्लास बाद में उसे सुप्रसिद्ध Symbol.metadata कुंजी के अंतर्गत रखती है।
context.metadata
परिभाषित की जा रही क्लास के लिए हर डेकोरेटर संदर्भ एक ही metadata ऑब्जेक्ट साझा करता है। डेकोरेटर इसमें डेटा जोड़ते हैं; यही क्लास का मेटाडेटा बन जाता है।
function tag(label: string) {
return function (value: any, context: DecoratorContext) {
context.metadata[context.name] = label;
};
}Symbol.metadata के माध्यम से पढ़ना
क्लास परिभाषित होने के बाद, एकत्रित मेटाडेटा SomeClass[Symbol.metadata] पर उपलब्ध होता है।
class User {
@tag("identifier") id = 0;
@tag("display") name = "";
}
const meta = (User as any)[Symbol.metadata];
console.log(meta); // { id: "identifier", name: "display" }साझा ऑब्जेक्ट क्यों
किसी क्लास के सभी डेकोरेटर एक ही metadata ऑब्जेक्ट में लिखते हैं, इसलिए आप अनेक डेकोरेटर से मिली जानकारी को क्लास का वर्णन करने वाले एक सुसंगत रिकॉर्ड में एकत्र कर सकते हैं।
संरचित मेटाडेटा संग्रहीत करना
मेटाडेटा के मान किसी भी आकार के हो सकते हैं। एक सामान्य तरीका यह है कि सदस्य के नाम से कुंजीबद्ध नेस्टेड रिकॉर्ड रखा जाए।
function column(type: string) {
return function (value: any, context: ClassFieldDecoratorContext) {
const md = context.metadata as any;
md.columns ??= {};
md.columns[context.name] = { type };
};
}क्लास-स्तरीय मेटाडेटा
क्लास डेकोरेटर भी मेटाडेटा लिख सकता है, जैसे तालिका का नाम, जो प्रत्येक फ़ील्ड की कॉलम जानकारी का पूरक हो।
function entity(table: string) {
return function (value: Function, context: ClassDecoratorContext) {
(context.metadata as any).table = table;
};
}
@entity("users")
class UserEntity {
@column("serial") id = 0;
@column("text") name = "";
}मेटाडेटा का वंशानुक्रम
मेटाडेटा ऑब्जेक्ट प्रोटोटाइप श्रृंखला में जुड़े होते हैं: सबक्लास के मेटाडेटा ऑब्जेक्ट का प्रोटोटाइप पैरेंट मेटाडेटा होता है, इसलिए विरासत में मिले प्रविष्टियाँ तब तक दिखाई देती हैं, जब तक उन्हें अधिलेखित न किया जाए।
Symbol.metadata पॉलीफ़िल
Symbol.metadata एक सुविख्यात सिंबल है। जिन वातावरणों में यह उपलब्ध नहीं होता, वहाँ आप एक पॉलीफ़िल असाइन करते हैं, ताकि रनटाइम एकत्रित ऑब्जेक्ट संलग्न कर सके।
(Symbol as any).metadata ??= Symbol.for("Symbol.metadata");reflect-metadata के बिना मेटाडेटा
यह एपीआई स्वयं डेकोरेटर प्रस्ताव का हिस्सा है, इसलिए इसके लिए अलग reflect-metadata लाइब्रेरी की आवश्यकता नहीं होती। वह लाइब्रेरी केवल पुराने प्रायोगिक डिज़ाइन-प्रकार उत्सर्जन के लिए प्रासंगिक रहती है, जिसके बारे में अगले पाठ में बताया गया है।
एक व्यावहारिक रीड हेल्पर
एक छोटा एक्सेसर किसी भी क्लास से मेटाडेटा पढ़ने को केंद्रीकृत करता है और मेटाडेटा न मिलने पर खाली ऑब्जेक्ट लौटाता है।
function getMeta(cls: any): Record<string, any> {
return (cls[Symbol.metadata] as Record<string, any>) ?? {};
}यह महत्वपूर्ण क्यों है
मेटाडेटा डेकोरेटरों को केवल एक बार उपयोग होने वाले व्यवहार-रैपरों से बदलकर आपकी क्लासों का घोषणात्मक विवरण बना देता है। फ़्रेमवर्क इस विवरण को पढ़कर रनटाइम रिफ़्लेक्शन की जटिल तरकीबों के बिना ORM, सत्यापक और राउटर बना सकते हैं।
त्वरित जाँच
मेटाडेटा एपीआई की अपनी समझ की पुष्टि करें।
पुनरावलोकन
डेकोरेटर का मेटाडेटा एपीआई हर डेकोरेटर को एक साझा context.metadata ऑब्जेक्ट देता है, जो क्लास पर Symbol.metadata के माध्यम से उपलब्ध होता है। डेकोरेटर बिना किसी बाहरी लाइब्रेरी के संरचित और विरासत योग्य मेटाडेटा एकत्र करते हैं, जिससे घोषणात्मक और फ़्रेमवर्क-अनुकूल क्लास विवरण संभव होते हैं।
एआई शिक्षक के साथ TypeScript सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 101
- पाठ
- 352
अक्सर पूछे जाने वाले प्रश्न
क्या “डेकोरेटर मेटाडेटा” पाठ निःशुल्क है?
हाँ—“डेकोरेटर मेटाडेटा” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और TypeScript Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। TypeScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“डेकोरेटर मेटाडेटा” में मैं क्या सीखूँगा?
मेटाडेटा API के साथ मेटाडेटा जोड़ें और पढ़ें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ TypeScript Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या TypeScript Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर TypeScript Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“डेकोरेटर मेटाडेटा” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस TypeScript Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर TypeScript Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- चरण 3 डेकोरेटर की व्याख्या
- डेकोरेटर मेटाडेटा
- reflect-metadata और डिज़ाइन प्रकार
- डेकोरेटर फ़्रेमवर्क बनाना