জেএসডোক: রিটার্ন অবজেক্ট স্ট্রাকচার


144

ফেরত দেওয়া কোনও জিনিসের কাঠামো সম্পর্কে আমি কীভাবে জেএসডোককে বলতে পারি। আমি @return {{field1: type, field2: type, ...}} descriptionসিনট্যাক্সটি খুঁজে পেয়েছি এবং চেষ্টা করেছি:

/**
 * Returns a coordinate from a given mouse or touch event
 * @param  {TouchEvent|MouseEvent|jQuery.Event} e    
 *         A valid mouse or touch event or a jQuery event wrapping such an
 *         event. 
 * @param  {string} [type="page"]
 *         A string representing the type of location that should be
 *         returned. Can be either "page", "client" or "screen".
 * @return {{x: Number, y: Number}} 
 *         The location of the event
 */
var getEventLocation = function(e, type) {
    ...

    return {x: xLocation, y: yLocation};
}

এটি সফলভাবে বিশ্লেষণ করার সময়, ফলস্বরূপ ডকুমেন্টেশনটি সহজভাবে বলে:

Returns: 
    The location of an event
    Type: Object

আমি একটি এপিআই বিকাশ করছি এবং লোকেরা যে জিনিসটি তারা ফিরে পাবে তা সম্পর্কে জানতে হবে। এটি কি জেএসডকে সম্ভব? আমি JSDoc3.3.0-beta1 ব্যবহার করছি।


আমি জানি যে @typedefএটি একটি কার্যকর / সমাধান, তবে এটি আক্ষরিক অবজেক্টের সাথে কাজ না করা অদ্ভুত বলে মনে হয়। ভবিষ্যতে যদি কেউ এ নিয়ে হোঁচট খায় তবে (যেমনটি আমি করেছি) আমি একটি সমস্যা github.com/jsdoc/jsdoc/issues/1678 যুক্ত করেছি যা এই পৃষ্ঠার চেয়ে আরও তথ্য থাকতে পারে।
— লেসেক

উত্তর:


263

@Typdef ব্যবহার করে আপনার কাঠামো পৃথকভাবে সংজ্ঞায়িত করুন :

/**
 * @typedef {Object} Point
 * @property {number} x - The X Coordinate
 * @property {number} y - The Y Coordinate
 */

এবং এটি রিটার্ন টাইপ হিসাবে ব্যবহার করুন:

/**
 * Returns a coordinate from a given mouse or touch event
 * @param  {TouchEvent|MouseEvent|jQuery.Event} e    
 *         A valid mouse or touch event or a jQuery event wrapping such an
 *         event. 
 * @param  {string} [type="page"]
 *         A string representing the type of location that should be
 *         returned. Can be either "page", "client" or "screen".
 * @return {Point} 
 *         The location of the event
 */
var getEventLocation = function(e, type) {
    ...

    return {x: xLocation, y: yLocation};
}

2
ধন্যবাদ। একাধিক @returnবিবৃতি প্রকৃতপক্ষে কাজ করবে, কিন্তু তারা আউটপুটে তালিকাভুক্ত করা হয় যেন তারা বেশ কিছু আয় (এক বুলেট পয়েন্ট রাজ্যের ছিল point - Objectএবং তারপর দুই অন্যান্য বুলেট পয়েন্ট point.x - Numberএবং point.y - Number)। যদিও আমি এটির সাথে থাকতে পারি, আমি মনে করি যে ফিরে আসা অবজেক্টটির ঘনীভূত আউটপুট থাকার কোনও উপায় নেই? বা খুব কমপক্ষে এন্ট্রিগুলির জন্য point.xএবং point.yইন্টেন্ট করা আছে?
— ব্ল্যাক ওল্ফ

1
হ্যাঁ, এটি সেরা বিকল্প হিসাবে মনে হয় না। আমি ভেবেছিলাম একটি নামবিহীন রিটার্ন সত্তা থাকার কোনও উপায় থাকতে পারে, তবে @typedefডকুমেন্টেশন আউটপুটের ক্ষেত্রে পদ্ধতির বিষয়টি সবচেয়ে পরিষ্কার, ধন্যবাদ!
— ব্ল্যাক ওলফ

গ্রোভী, দ্বিতীয় বিকল্প হিসাবে প্রথম অপশনটি সরানো কেবল সর্বোত্তম।
— বিজিরিসসেন

1
আপনার আরও ভাল যোগ করুন @innerবা টাইপ সংজ্ঞা globalডকুমেন্টেশনে সুযোগ থাকবে । +1
— ওনুর ইল্ডারিয়াম

1
আমি সবসময় ব্যবহার করেছি @typedef {Object} Point। প্রকৃতপক্ষে, Point"অমীমাংসিত ভেরিয়েবল বা টাইপ পয়েন্ট" বার্তা সহ পিএইচপিস্টোরমে এই দুই-লাইন ফর্ম হাইলাইটগুলি ব্যবহার করে । @typedefডক্স এই সমর্থন, কিন্তু আমি যদি এটি একটি বৈধ বৈকল্পিক এর এই উত্তর সম্পাদনা করতে চাই না।
— ডেভিড হার্কনেস

22

ইতিমধ্যে পোস্ট করা পরামর্শগুলির বিকল্প, আপনি এই ফর্ম্যাটটি ব্যবহার করতে পারেন:

/**
 * Get the connection state.
 *
 * @returns {Object} connection The connection state.
 * @returns {boolean} connection.isConnected Whether the authenticated user is currently connected.
 * @returns {boolean} connection.isPending Whether the authenticated user's connection is currently pending.
 * @returns {Object} connection.error The error object if an error occurred.
 * @returns {string} connection.error.message The error message.
 * @returns {string} connection.error.stack The stack trace of the error.
 */
getConnection () {
  return {
    isConnected: true,
    isPending: false,
    error
  }
}

যা নিম্নলিখিত ডকুমেন্টেশন আউটপুট দেবে:

    Get the connection state.

    getConnection(): Object

    Returns
    Object: connection The connection state.
    boolean: connection.isConnected Whether the authenticated user is currently connected.
    boolean: connection.isPending Whether the authenticated users connection is currently pending.
    Object: connection.error The error object if an error occurred.
    string: connection.error.message The error message.
    string: connection.error.stack The stack trace of the error.

17

একটি পরিষ্কার সমাধান হ'ল একটি ক্লাস লিখুন এবং এটি ফিরে আসুন।

/** 
 *  @class Point
 *  @type {Object}
 *  @property {number} x The X-coordinate.
 *  @property {number} y The Y-coordinate.
 */
function Point(x, y) {
  return {
        x: x,
        y: y
    };
}

/**
 * @returns {Point} The location of the event.
 */
var getEventLocation = function(e, type) {
    ...
    return new Point(x, y);
};

আমি যখন এটি করি তবে গুগল ক্লোজার কম্পাইলার ব্যবহার করি, তখন আমি একটি সতর্কতা পাই: "নন-কনস্ট্রাক্টর ইনস্ট্যান্টিয়েট করতে পারে না"। আমি ফাংশনে @ কনস্ট্রাক্টর যুক্ত করার চেষ্টা করেছি (@ পুনর্বার উপরে) তবে এটি কোনও লাভ হয়নি। কেউ যদি কীভাবে এটি ঠিক করতে জানেন তবে দয়া করে আমাকে জানান। ধন্যবাদ!
— অ্যান্ড্রয়েডদেভ

2
@ অ্যান্ড্রয়েডদেব এটি কারণ ফাংশনটি Pointকোনও নির্মাণকারী নয়, এটি পরিবর্তনের জন্য Pointফাংশনটির দেহটি প্রতিস্থাপনthis.x = x; this.y = y;
— ফেইরেল

1
আমাদের এখানে নতুন ব্যবহারের প্রয়োজনের কারণটি আমি দেখতে পাচ্ছি না, কেন কেবলমাত্র পয়েন্ট (এক্স, ওয়াই) ফিরে আসবে না?
— চাইনিস্ট

@CHANist, new সিনট্যাক্সটি হ'ল একটি উদাহরণ তৈরি করতে হবে constructor। ছাড়া new, এর প্রসঙ্গটি thisহবে বিশ্বব্যাপী প্রসঙ্গ। আপনি newপ্রভাবটি না দেখে উদাহরণ তৈরি করার চেষ্টা করতে পারেন।
— আকাশ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.