JSDoc में खुले-समाप्त तर्क कार्यों को दस्तावेज़ करने का सही तरीका


84

मान लें कि आपके पास निम्नलिखित कुछ है:

var someFunc = function() {
    // do something here with arguments
}

आप कैसे सही ढंग से दस्तावेज़ देंगे कि यह फ़ंक्शन JSDoc में किसी भी तर्क को ले सकता है? यह मेरा सबसे अच्छा अनुमान है, लेकिन मुझे यकीन नहीं है कि यह सही है।

/**
 * @param {Mixed} [...] Unlimited amount of optional parameters
 */
var someFunc = function() {
    // do something here with arguments
}

संबंधित: php - मापदंडों की एक चर संख्या को कैसे करें

जवाबों:


119

JSDoc चश्मा और गूगल की क्लोजर संकलक यह इस तरह से कार्य करें:

@param {...number} var_args

जहाँ "संख्या" तर्क के प्रकार की अपेक्षा की जाती है।

इसका पूरा उपयोग, तब, निम्न की तरह दिखेगा:

/**
* @param {...*} var_args
*/
function lookMaImVariadic(var_args) {
    // Utilize the `arguments` object here, not `var_args`.
}

अपने अतिरिक्त तर्कों को एक्सेस करने के लिए टिप्पणी arguments(या कुछ ऑफ़सेट arguments) के उपयोग के बारे में टिप्पणी पर ध्यान दें । var_argsयह सिर्फ आपके आईडीई को संकेत देता था कि तर्क वास्तव में मौजूद है।

ईएस 6 में बाकी पैरामीटर वास्तविक पैरामीटर को प्रदान किए गए मानों को शामिल करने के लिए एक कदम आगे ले जा सकते हैं (इसलिए कोई और अधिक उपयोग argumentsआवश्यक नहीं है):

/**
* @param {...*} var_args
*/
function lookMaImES6Variadic(...var_args) {
    // Utilize the `var_args` array here, not `arguments`.
}

यह शायद एक उत्तर के करीब है जितना हम प्राप्त कर सकते हैं :)
kflorence

2
यह भी ध्यान देने योग्य है, WebStorm की आंतरिक JSDoc फाइलें (DHTML.js, आदि) इसी सिंटैक्स का उपयोग करती हैं। शायद यह वास्तविक मानक है।
स्कॉट रिपी जूल

2
यह भी यहाँ काफी अच्छी तरह से वर्णित है: usejsdoc.org/tags-param.html (खंड 'एक पैरामीटर को दोहराया जाने की अनुमति देता है')
फ्रेंकोइस

इस उत्तर एड्रियन होलोवेटी के जवाब एकीकृत करने के लिए संपादित किया जाना चाहिए: वहाँ की जरूरत है एक वास्तविक चर के नाम से जाना var_argsया आपके एकमात्र पैरामीटर के रूप में कॉल करना चाहते हैं जो कुछ भी। सैड हैक।
ओली

1
के अलावा के साथ आराम मापदंडों ES6 में, यह एक बहुत अधिक समझ में आता है। /** @param {...Function} tasks The tasks. */ function waterfallTasks(...tasks) {बाकी मापदंडों के मापदंडों में हमेशा एक कार्यात्मक उपस्थिति होती है।
शिबुमी

27

यह कैसे करें अब JSDoc प्रलेखन में वर्णित किया गया है, और यह क्लोजर डॉक्स करते हैं जैसे एक दीर्घवृत्त का उपयोग करता है।

@param {...<type>} <argName> <Argument description>

आपको दीर्घवृत्त के बाद जाने के लिए एक प्रकार की आपूर्ति करने की आवश्यकता है, लेकिन आप किसी *भी चीज़ को स्वीकार करने का वर्णन करने के लिए उपयोग कर सकते हैं , या |कई स्वीकार्य प्रकारों को अलग करने के लिए उपयोग कर सकते हैं । जेनरेटेड डॉक्यूमेंटेशन में JSDoc इस तर्क को रिपीटेबल के रूप में वर्णित करेगा , उसी तरह यह वैकल्पिक तर्कों को वैकल्पिक बताता है ।

मेरे परीक्षण में वास्तविक जावास्क्रिप्ट फ़ंक्शन परिभाषा में कोई तर्क रखने की आवश्यकता नहीं थी, इसलिए आपके वास्तविक कोड में केवल खाली कोष्ठक हो सकते हैं, अर्थात function whatever() { ... }

एकल प्रकार:

@param {...number} terms Terms to multiply together

किसी भी प्रकार (नीचे के उदाहरण में, वर्ग कोष्ठक का अर्थ itemsवैकल्पिक और दोहराव दोनों के रूप में टैग किया जाएगा):

@param {...*} [items] - zero or more items to log.

उद्घाटन सूची से पहले दीर्घवृत्त के साथ कई प्रकार के कोष्ठक की आवश्यकता होती है:

@param {...(Person|string)} attendees - Meeting attendees, listed as either 
                                        String names or {@link Person} objects

1
और कुंजी-मूल्य जोड़े के रूप में उपयोग की जाने वाली वस्तु के बारे में क्या? वर्तमान में मैं उपयोग करता हूं: @param {{...(key: value)}} [config] - specific configs for this transferलेकिन सोच रहा था कि क्या यह सही है?
अधिकतम

@ मोम मैं डॉक्स से नहीं बता सकता कि अगर यह करने का आधिकारिक तरीका है, लेकिन ऐसा लगता है कि इसे उम्मीद के मुताबिक काम करना चाहिए। इसलिए अगर यह आउटपुट आपके साथ ठीक है, तो मैं इसका उपयोग करूंगा :)
डैनियल बेयर्ड

10

से JSDoc उपयोगकर्ता समूह :

कोई आधिकारिक तरीका नहीं है, लेकिन एक संभव समाधान यह है:

/**
 * @param [...] Zero or more child nodes. If zero then ... otherwise ....
 */

वर्ग कोष्ठक एक वैकल्पिक पैरामीटर को इंगित करता है, और ... (मुझे करने के लिए) "कुछ मनमाना संख्या" इंगित करेगा।

एक और संभावना यह है ...

/**
 * @param [arguments] The child nodes.
 */

किसी भी तरह से आप क्या मतलब संवाद करना चाहिए।

यह थोड़ा दिनांकित है, हालांकि (2007), लेकिन मुझे कुछ भी अधिक वर्तमान के बारे में पता नहीं है।

यदि आपको परम प्रकार के दस्तावेज को 'मिश्रित' के {*}रूप में , उपयोग करने की आवश्यकता है , तो @param {*} [arguments]


6
मुझे बुरा नहीं लगता कि मेरे जवाब में कोई कमी है, लेकिन मैं एक टिप्पणी की उम्मीद करता हूं कि आपने यह समझा दिया कि आपने ऐसा क्यों किया (जो भी आप हैं)। यदि आपको लगता है कि यह गलत है, तो मुझे - और हम सभी को - पता है क्यों।
hashchange

2
मेरी पसंद का IDE (WebStorm 8.0.1) सिंटैक्स # 2 @param [arguments](या @param {*} [arguments]उस मामले के लिए) के साथ-साथ Google क्लोजर कंपाइलर द्वारा स्थापित सिंटैक्स (किसी अन्य उत्तर में उल्लिखित) का समर्थन करता है। @param [...]समर्थित नहीं है।
मिस्टेको

@ mistaecko लेकिन केवल नामित मापदंडों के साथ सही है? यही कारण है कि मैं उपयोग नहीं कर रहा हूं, इसलिए यह मेरे लिए स्वीकार्य उत्तर नहीं है ...
सेबेस्टियन

10

मैंने काफी समय तक इसके साथ काम किया। Google क्लोजर कंपाइलर के साथ यह कैसे करें:

/**
* @param {...*} var_args
*/
function my_function(var_args) {
    // code that accesses the magic 'arguments' variable...
}

कुंजी आपके फ़ंक्शन को एक var_argsपैरामीटर देने के लिए है (या जिसे आप अपने @paramबयान में कहते हैं ) भले ही फ़ंक्शन वास्तव में उस पैरामीटर का उपयोग नहीं करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.