ডকুমেন্ট জেএসডকে ফাংশন প্যারামিটারের কাঠামো তৈরি করে


90

পূর্বে আমি সর্বদা আমার অবজেক্টের প্যারামিটারগুলি নিম্নরূপ নথিভুক্ত করেছি:

/**
 * 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
}

তবে আমি অনিশ্চিত যে বর্ণনামূলক ফাংশন প্যারামিটারের সাথে সর্বোত্তম পন্থাটি কী। আমি কি কেবলমাত্র বিষয়টিকে উপেক্ষা করে, কোনওভাবে এটি সংজ্ঞায়িত করব বা এটি নথিভুক্ত করার সর্বোত্তম উপায় কী?

/**
 * 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
}

4
আমি মনে করি প্রথম পদ্ধতির এখনও ঠিক আছে। আপনার কোডটিতে এই অবজেক্টটির নাম দেওয়া configহয়েছে বা তার কোনও নাম আছে কিনা তা কেউই চিন্তা করে না ।
বার্গি

ওয়েবস্টোরমে আমি খুঁজে পেয়েছি যে আমি যদি কেবলমাত্র (ধ্বংসের পরে) প্যারামিটারগুলি বর্ণনা করি এবং কাঠামোগত উপেক্ষা করি তবে এটি বেশিরভাগ কম-সাধারণ ক্ষেত্রে বাদে কাজ করে। সুতরাং আপনার উদাহরণে, দুটি পরামিতি বর্ণনা করুন fooএবং bar। এটি চূড়ান্ত সমাধান নয়, তবে কোনও আইটেম ব্যবহারের মাধ্যমে পরিদর্শন ত্রুটিগুলি পাওয়া গেছে - এবং আইডিই থেকে পরিদর্শন এবং স্বতঃপূরণগুলি আমি সবচেয়ে বেশি যত্ন করি।
মারে

উত্তর:


96

ডকুমেন্টেশনে বর্ণিত হিসাবে এটি এটির মতোই ।

/**
 * 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;

আমি দেখতে পাচ্ছি না যে আপনার মতো একাধিক কাঠামোগত যুক্তি যুক্ত থাকলে JSDoc কীভাবে নির্বিঘ্নে কাজ করে function ({a}, {a}) {}। আমার ধারণা যে জেএসডোকটি হবে @param {object} param1, @param {*} param1.a, @param {object} param2, @param {*} param2.a, এবং @paramট্যাগগুলির অর্ডারের উপর নির্ভর করবে ?
ZachB

@ জাচবি: function ({a}, {a}) {}এখানে অবৈধ সংশ্লেষ , যেহেতু aদুবার সংজ্ঞায়িত করা হয়েছে।
সার্বারুস

4
উফ! ({a: b}, {a}))বা ({a}, {b})- মুল বক্তব্যটি ছিল যে জেএসডোক @paramট্যাগগুলি অর্ডারহীন এএফএআইকি এবং কীগুলি অস্পষ্ট হতে পারে সম্পত্তিটির নাম ব্যবহার করে ম্যাচের চেষ্টা করার জন্য জেএসডোক ছিল। ভিএসকোডের পরবর্তী সংস্করণটি এই পরিস্থিতিটি সমাধান করার জন্য অবস্থানিক লক্কুল ব্যবহার করতে চলেছে।
ZachB

4
ধন্যবাদ, @ d0gb3r7। আমি উত্তরে লিঙ্কটি আপডেট করেছি।
সার্বারবাস

10

আমি ব্যক্তিগতভাবে এটি ব্যবহার করি:

/**
* @param {{
  a: number
  b: number
}} param0
* @returns {number} The sum
*/
const func = ({ a, b }) => a + b;

ঠিক সেখানে অবজেক্ট তৈরি করুন।

আমিও টাইপ করা বিষয় সদ্ব্যবহার , আর obtional ঘোষণা করা হবে bহিসাবে b?বা b: number | undefinedযেমন JSDoc এছাড়াও ইউনিয়ন পারবেন


-8

দেখুন JSDoc এর "দলিল একটি প্যারামিটার সম্পত্তিসমূহ" :

/**
 * 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) {
    // ...
};

( গুগল ক্লোজার সংকলক প্রকারের চেকিং , যা ভিত্তিক কিন্তু জেএসডোক থেকে ডাইভার্ট করা হয়েছিল তাও অনুমতি দেয় @param {{x:number,y:number}} point A "point-shaped" object.)


4
তিনি কি ইতিমধ্যে তা করছেন না? তিনি জিজ্ঞাসা করছেন এখন কী করতে হবে যে employeeফাংশনে আর কোনও ভেরিয়েবল নেই ।
বেরগি

7
এটি প্রশ্নের উত্তর দেয় না - এই উদাহরণটি ধ্বংসাত্মক ব্যবহার করে না! ধ্বংসের সাথে আপনার কোনও অভিভাবকীয় বিষয় নেই।
মারে

প্রকৃতপক্ষে তার একই লিঙ্কটি, তার উদাহরণের পরে ঠিক একই জেসডোক মন্তব্যের সাথে একটি আপেক্ষিক উদাহরণ দেয় Project.prototype.assign = function({ name, department })। উদাহরণের আগে তারা বলে, "যদি কোনও সুস্পষ্ট নাম ব্যতীত কোনও প্যারামিটারটি তৈরি করা হয়, আপনি বস্তুকে একটি উপযুক্ত দিতে পারেন এবং এর বৈশিষ্ট্যগুলি দলিল করতে পারেন।"
notacouch
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.