यदि प्रश्न में फ़ंक्शन उपयोगकर्ता परिभाषित वर्ग की एक विधि है, तो आप रनटाइम पर वापसी प्रकार (निर्माण कार्य) निर्धारित करने के लिए रिफ्लेक्ट मेटाडेटा के साथ संयोजन में विधि सज्जाकारों का उपयोग कर सकते हैं (और इसके साथ, जैसा कि आप फिट देखते हैं)।
उदाहरण के लिए, आप इसे कंसोल में लॉग कर सकते हैं:
function logReturnType(
target: Object | Function,
key: string,
descriptor: PropertyDescriptor
): PropertyDescriptor | void {
var returnType = Reflect.getMetadata("design:returntype", target, key);
console.log(returnType);
}
बस अपनी पसंद की एक विधि पर इस विधि डेकोरेटर को स्नैप करें और आपके पास उस ऑब्जेक्ट के कंस्ट्रक्टर फ़ंक्शन का सटीक संदर्भ है जिसे विधि कॉल से माना जाता है।
class TestClass {
@logReturnType
public test(): number {
return 42;
}
}
हालाँकि इस दृष्टिकोण में कुछ उल्लेखनीय सीमाएँ हैं:
- आपको स्पष्ट रूप से इस तरह से सजाए गए तरीके पर रिटर्न प्रकार को परिभाषित करने की आवश्यकता है, अन्यथा आप अपरिभाषित हो जाएंगे
Reflect.getMetadata
,
- आप केवल वास्तविक प्रकारों को संदर्भित कर सकते हैं जो संकलन के बाद भी मौजूद हैं; वह है, कोई इंटरफेस या जेनरिक नहीं
इसके अलावा, आपको टाइपस्क्रिप्ट कंपाइलर के लिए निम्न कमांड लाइन तर्क निर्दिष्ट करने की आवश्यकता होगी, क्योंकि डेकोरेटर और प्रतिबिंबित मेटाडाटा दोनों इस पोस्ट को लिखने के रूप में प्रयोगात्मक विशेषताएं हैं:
--emitDecoratorMetadata --experimentalDecorators