2016-04-28 3 views
16

में destructured समारोह पैरामीटर पहले मैं हमेशा अपने वस्तु मापदंडों प्रलेखित किया है इस प्रकार है:दस्तावेज़ JSDoc

/** 
* Description of the function 
* 
* @param {Object} config - The configuration 
* @param {String} config.foo 
* @param {Boolean} [config.bar] - Optional value 
* @return {String} 
*/ 
function doSomething (config = {}) { 
    const { foo, bar } = config; 
    console.log(foo, bar); 
    // do something 
} 

लेकिन मैं अनिश्चित क्या सबसे अच्छा तरीका desctructured समारोह पैरामीटर के साथ है कर रहा हूँ। क्या मैं ऑब्जेक्ट को अनदेखा करता हूं, इसे किसी भी तरह परिभाषित करता हूं या इसे दस्तावेज करने का सबसे अच्छा तरीका क्या है?

/** 
* Description of the function 
* 
* @param {String} foo 
* @param {Boolean} [bar] - Optional value 
* @return {String} 
*/ 
function doSomething ({ foo, bar } = {}) { 
    console.log(foo, bar); 
    // do something 
} 

मैं ऊपर मेरी दृष्टिकोण की तरह लगता है कि समारोह एक object और नहीं दो अलग-अलग पैरामीटर उम्मीद है कि यह स्पष्ट नहीं है।

एक और तरीका जो मैं सोच सकता था @typedef का उपयोग करेगा, लेकिन यह एक बड़ी गड़बड़ी (विशेष रूप से कई विधियों के साथ एक बड़ी फ़ाइल में) हो सकता है?

/** 
* @typedef {Object} doSomethingConfiguration 
* @property {String} foo 
* @property {Boolean} [bar] - Optional value 
*/ 

/** 
* Description of the function 
* 
* @param {doSomethingConfiguration} 
* @return {String} 
*/ 
function doSomething ({ foo, bar } = {}) { 
    console.log(foo, bar); 
    // do something 
} 
+1

मुझे लगता है कि पहले दृष्टिकोण अभी भी ठीक है। कोई भी इस बात पर परवाह नहीं करता है कि ऑब्जेक्ट को आपके कोड में 'config' नाम दिया गया है या उसके पास कोई नाम है। – Bergi

+0

वेबस्टॉर्म में मैंने पाया है कि यदि मैं केवल (बाद में विनाशकारी) पैरामीटर का वर्णन करता हूं और विनाशकारी को अनदेखा करता हूं तो यह ज्यादातर आम मामलों को छोड़कर काम करता है। तो अपने उदाहरण में, दो पैरामीटर 'foo' और' bar' का वर्णन करें। यह अंतिम समाधान नहीं है, लेकिन ऑब्जेक्ट का उपयोग करने वाले किसी भी दृष्टिकोण ने निरीक्षण त्रुटियों को जन्म दिया - और आईडीई से निरीक्षण और स्वत: पूर्णता मुझे सबसे अधिक पसंद है। –

उत्तर

-7

JSDoc's "Documenting a parameter's properties" देखें:

/** 
* Assign the project to an employee. 
* @param {Object} employee - The employee who is responsible for the project. 
* @param {string} employee.name - The name of the employee. 
* @param {string} employee.department - The employee's department. 
*/ 
Project.prototype.assign = function(employee) { 
    // ... 
}; 

(Google Closure compiler type checking, कि पर आधारित था लेकिन JSDoc से कहीं और, यह भी अनुमति देता है @param {{x:number,y:number}} point A "point-shaped" object.)

+1

क्या वह पहले से ही ऐसा नहीं कर रहा है? वह पूछ रहा है कि अब क्या करना है कि अब समारोह में कोई कर्मचारी नहीं है। – Bergi

+7

यह सवाल का जवाब नहीं देता है - यह उदाहरण विनाशकारी का उपयोग नहीं करता है! विनाश के साथ आपके पास कोई मूल वस्तु नहीं है। –

6

यह है कि यह कैसे इरादा है, जहाँ तक मैं पर मिल सकती है jsdoc3 repo:

/** 
* My cool function. 
* 
* @param {Object} obj - An object. 
* @param {string} obj.prop1 - Property 1. 
* @param {string} obj.prop2 - Property 2. 
*/ 
var fn = function ({prop1, prop2}) { 
    // Do something with prop1 and prop2 
} 

तो, आपका पहला उदाहरण काफी सही है।

कुछ गहरी घोंसले के साथ एक और उदाहरण:

/** 
* Nesting example. 
* 
* @param {object} param 
* @param {number} param.a - First value 
* @param {object} param.b - Wrapper 
* @param {number} param.b.c - Second value 
* @return {number} sum a and b 
*/ 
letters = ({a, b: {c}}) => a + c; 
संबंधित मुद्दे