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


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.