11

में जावास्क्रिप्ट कॉन्फ़िगरेशन ऑब्जेक्ट्स को कैसे दस्तावेज़ित करें मैं कुछ समय के लिए विजुअल स्टूडियो के जावास्क्रिप्ट Intellisense functionality का उपयोग कर रहा हूं और मानक एपीआई के लिए सुझाव प्रदान करता हूं, लेकिन मुझे लगता है कि मुझे विजुअल स्टूडियो नहीं मिल रहा है कॉन्फ़िगरेशन ऑब्जेक्ट्स को समझने के लिए (यानी एक वैकल्पिक ऑब्जेक्ट वाला एक ऑब्जेक्ट जिसमें फ़ंक्शन के लिए तर्क के रूप में)।विजुअल स्टूडियो इंटेलिजेंस

official JSDoc syntax पता चलता है कि एक पैरामीटर गुण होते हैं होने की उम्मीद है, तो आपको प्रत्येक के लिए एक अलग @param लाइन बना सकते हैं और डॉट नोटेशन का उपयोग करें:

/** 
* @param {Object} config 
* @param {String} config.name 
* @param {Number} config.gold 
*/ 
function do_it(config) { ... } 

हालांकि, विजुअल स्टूडियो नहीं मानता है - यह config renders , config.name, और config.gold तीन अलग-अलग शीर्ष-स्तरीय पैरामीटर के रूप में।

do_it() registers three separate parameters

इससे भी बदतर, विधि शरीर के भीतर स्वत: पूर्ण कार्यक्षमता मानकों या तो बहुत कम उनके प्रकारों को नहीं पहचानता है:

Attempting to access methods of config.name yields yellow triangles and no help.

एकमात्र समाधान है कि प्रतीत होता है में भी करीब आने की विजुअल स्टूडियो उचित दस्तावेज (@constructor और @property टैग) के साथ कभी-कभी कन्स्ट्रक्टर फ़ंक्शंस लिखना नहीं है, जो मुझे बहुत सारे मृत कोड लिखता है और जावास्क्रिप्ट की क्लास-फ्री मानसिकता के खिलाफ भी जाता है (यही कारण है कि मैं पहले कॉन्फ़िगरेशन ऑब्जेक्ट्स पहले स्थान पर)। यह मुझे कॉन्फ़िगरेशन ऑब्जेक्ट भी लिखने नहीं देता है!

न केवल यह, लेकिन मुझे यह भी पता है कि विजुअल स्टूडियो को इसकी आवश्यकता नहीं है। उदाहरण के लिए, जब मैं this library function के लिए एक कॉल बाहर लिखा है, यह है कि तर्क वस्तु गुण idsource कहा जाता है, की जरूरत है बटोरने के लिए सक्षम था, और target, और उन नामों का सुझाव दिया है जब मैं एक वस्तु समारोह के तर्क के लिए शाब्दिक बनाया - एक के बिना और प्रलेखन की एक पंक्ति। ,

Visual Studio autosuggests these three properties with no documentation comments at all

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

विजुअल स्टूडियो स्पष्ट रूप से कॉन्फ़िगरेशन ऑब्जेक्ट्स की अवधारणा को समझता है और सुझाए गए गुण प्रदान करने के लिए कुछ तर्क कर रहा है। वह एल्गोरिदम क्या है? और मैं अपने कोड को उलझाने के बिना इसका कैसे फायदा उठा सकता हूं?

उत्तर

6

आप correct JSDoc syntax का उपयोग कर रहे हैं, लेकिन आज के रूप में विजुअल स्टूडियो सिर्फ नामित गुणों के साथ पैरामीटर ऑब्जेक्ट्स के लिए सही IntelliSense का निर्माण नहीं करता है।वर्तमान में एक आप का उल्लेख की तुलना में इस दूसरे के आसपास कोई दूसरा रास्ता नहीं है, लेकिन आप जगह में config वस्तु का वर्णन और मृत कोड लिखने के रूप में आप इस तरह का उल्लेख बच सकते हैं:

/** 
* @typedef {object} TestConfig 
* @property {string} name 
* @property {number} gold 
*//** 
* @param {TestConfig} config 
*/ 
function test(config) { 

} 

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

अपने दूसरे प्रश्न के बारे में, इंटेलिसेन्स आप sigma.js लाइब्रेरी के लिए देख सकते हैं, फ़ंक्शन कोड के शरीर को पार्स करने से लिया गया है, जेएसडीओसी टिप्पणियों पर नहीं। यही कारण है कि आप अभी भी इसका उपयोग कर सकते हैं जब आप मिनीफिल्ड "sigma.min.js" को आपके प्रोजेक्ट में बनाते हैं, जहां टिप्पणियां छीन ली गई हैं।

आप इस जोड़ने पैरामीटर मान्यता से मिलता-जुलता परीक्षण कर सकते हैं library function (किसी अन्य तरीके से config.name या config.gold तक पहुँचने भी समान ही परिणाम मिलेगा, हालांकि):

: में

function do_it(config) { 
    if (Object(config) !== config || arguments.length !== 1) throw 'do_it: wrong arguments.'; 
    if (typeof config.name !== 'string') throw 'config must have a name string field.'; 
    if (typeof config.gold !== 'number') throw 'config must have a gold number field.'; 
    ... 
} 

परिणाम enter image description here

इसी तरह, एक बार जब आप पर्याप्त जानकारी प्रदान करते हैं तो सही प्रकार का अनुमान लगाया जाएगा:

enter image description here

+1

प्रलेखन भाग काम नहीं करता है - ऐसा नहीं लगता है कि वीएस '@ typedef' का समर्थन करता है। हालांकि, मुझे पता चला है कि वीएस सही प्रकार को एक डमी कन्स्ट्रक्टर और टाइपपीफ, या फ़ंक्शन के पहले कॉल के पैरामीटर के साथ देगा। – TheHansinator

+0

यह सच है, यह दस्तावेज नहीं है, लेकिन यह काम करता है, आपको सही पैरामीटर गुण और उनके प्रकार मिलेंगे। जैसा कि ऊपर बताया गया है, आपको वास्तव में 'कॉन्फ़िगरेशन' ऑब्जेक्ट को दस्तावेज़ करने के लिए डमी कन्स्ट्रक्टर की आवश्यकता नहीं है जो फ़ंक्शन से ठीक पहले हो सकता है। फ़ंक्शन पर पहली कॉल के लिए, यह मानते हुए कि फ़ंक्शन कॉल को वीएस द्वारा कुछ दृष्टांत पारित किया जा रहा है (उस ऑब्जेक्ट की तरह शाब्दिक)। मैं समझाने की कोशिश कर रहा था कि आप कुछ पुस्तकालयों के लिए इंटेलिसेन्स क्यों देख सकते थे, क्योंकि आप पहले ही जेएसडीओसी का उपयोग कर रहे हैं, मैं व्यक्तिगत रूप से पहले दृष्टिकोण के साथ जाऊंगा .. – cviejo

+0

विजुअल स्टूडियो कम्युनिटी 2015 संस्करण 14.0.23107.0 के साथ परीक्षण किया गया, आप किस संस्करण का उपयोग कर रहे हैं ? – cviejo

संबंधित मुद्दे