2011-01-18 13 views
57

के मान लीजिए निम्नलिखित की तरह कुछ है:सही रास्ता

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 - How to doc a variable number of parameters

उत्तर

69

JSDoc specs और Google's Closure Compiler यह इस तरह से कार्य करें:

@param {...number} var_args 

कहाँ "संख्या" तर्क का प्रकार की उम्मीद है। arguments उपयोग के बारे में (arguments की भरपाई या कुछ) अपने अतिरिक्त तर्क का उपयोग करने की टिप्पणी

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

नोट:

इस की पूरी उपयोग, तो कुछ ऐसा नज़र आ जाएगा। var_args यह सिर्फ आपके आईडीई को संकेत देने के लिए प्रयोग किया जाता है कि तर्क वास्तव में मौजूद है।

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

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

यह पी है एक उत्तर के करीब के रूप में हम आसानी से प्राप्त कर सकते हैं :) – kflorence

+2

ध्यान देने योग्य भी, वेबस्टॉर्म की आंतरिक जेएसडीओसी फाइलें (DHTML.js, आदि) इस वाक्यविन्यास का उपयोग करती हैं। शायद यह डी-फैक्टो मानक है। –

+2

यह भी यहां बहुत अच्छी तरह से वर्णित है: http://usejsdoc.org/tags-param.html (सेक्शन 'पैरामीटर को दोहराने की अनुमति देता है') – Francois

9

JSDoc users group से:

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

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

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

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

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

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

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

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

+5

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

+1

मेरी पसंद का आईडीई (वेबस्टॉर्म 8.0.1) उस मामले के लिए वाक्यविन्यास # 2 '@param [तर्क]' (या '@param {*} [तर्क]' का समर्थन करता है) साथ ही साथ Google क्लोजर कंपाइलर द्वारा स्थापित वाक्यविन्यास (उल्लेख किया गया है) एक और जवाब में)। '@param [...]' समर्थित नहीं है। – mistaecko

+0

@ मिस्टेको लेकिन केवल नामित पैरामीटर के साथ सही है? यही वह है जिसका मैं उपयोग नहीं कर रहा हूं, इसलिए यह मेरे लिए स्वीकार्य उत्तर नहीं है ... – Sebastian

10

मैंने कुछ समय से इस के साथ फटकार किया। यहां Google क्लोजर संकलक के साथ यह करना है:

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

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

20

यह कैसे करें JS12oc दस्तावेज़ में now described है, और यह क्लोजर डॉक्स की तरह एक इलिप्सिस का उपयोग करता है।

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

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

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

एकल के प्रकार:

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

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

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

एकाधिक प्रकार के आसपास कोष्ठक की जरूरत है शुरुआती माता-पिता से पहले इलिप्सिस के साथ सूची टाइप करें:

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

और कुंजी-मूल्य जोड़े के रूप में उपयोग की जाने वाली वस्तु के बारे में क्या? वर्तमान में मैं इसका उपयोग करता हूं: '@param {{... (key: value)}} [config] - इस स्थानांतरण के लिए विशिष्ट कॉन्फ़िगरेशन 'लेकिन यह सोच रहा था कि यह सही है या नहीं? – Max

+0

@ मैक्स मैं दस्तावेज़ों से नहीं कह सकता कि अगर ऐसा करने का आधिकारिक सही तरीका है, लेकिन ऐसा लगता है कि इसे अपेक्षित रूप से काम करना चाहिए। तो अगर यह आउटपुट उत्पन्न करता है तो आप ठीक हैं, मैं इसका उपयोग करूँगा :) –

+0

@ मैक्स आप बेहतर तरीके से अपना खुद का प्रकार परिभाषित करेंगे: http://usejsdoc.org/tags-typedef.html – m93a

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