JSDoc: Dönüş nesnesi yapısı


144

JSDoc'a döndürülen bir nesnenin yapısı hakkında nasıl bilgi verebilirim? @return {{field1: type, field2: type, ...}} descriptionSözdizimini buldum ve denedim:

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

Bu başarıyla ayrıştırılırken, ortaya çıkan belgeler basitçe şunu belirtmektedir:

Returns: 
    The location of an event
    Type: Object

Ben bir API geliştiriyorum ve insanların geri alacakları nesne hakkında bilmek gerekir. Bu JSDoc'ta mümkün mü? JSDoc3.3.0-beta1 kullanıyorum.


Bunun @typedefbir çözüm / çözüm olduğunu biliyorum , ancak bunun gerçek nesnelerle çalışmaması garip görünüyor. Gelecekte kimse bunu tökezlediğinde (yaptığım gibi) bu sayfadan daha fazla bilgiye sahip olabilecek bir sorun ekledim github.com/jsdoc/jsdoc/issues/1678 .
Leszek

Yanıtlar:


263

Bir @typdef kullanarak yapınızı ayrı ayrı tanımlayın :

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

Ve dönüş türü olarak kullanın:

/**
 * 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
Teşekkürler. Çoklu @returnifadeleri gerçekten de işi, ama onlar (Bir mermi noktası devletler çeşitli döner sanki onlar çıktı listelenen point - Objectsonra ve diğer iki mermi için puan point.x - Numberve point.y - Number). Bununla yaşayabilirken, döndürülen nesnenin yoğun bir çıktısına sahip olmanın bir yolu olmadığını varsayalım? Ya da en azından girdileri için sahip point.xve point.ygirintili?
BlackWolf

1
Evet, bu en iyi seçenek gibi görünüyor. Adsız bir iade varlığına sahip olmanın bir yolu olabileceğini düşündüm, ancak @typedefyaklaşım dokümantasyon çıktısı açısından en açık olanı, teşekkürler!
BlackWolf

groovy, 2. seçenek sadece en iyisi olduğu için ilk seçeneği kaldırıldı.
BGerrissen

1
Daha iyi eklemek @innerveya tür tanımı globalbelgelerinde kapsamı olacaktır . +1
Onur Yıldırım

1
Hep kullandım @typedef {Object} Point. Aslında, bu iki satırlı form PointPhpStorm'da "Çözülmemiş değişken veya tip Point" mesajıyla vurgulanır . @typedefDocs bunu desteklemek, ancak geçerli bir varyantı ise bu cevabı düzenlemek istemiyoruz.
David Harkness

22

Önceden yayınlanan önerilere bir alternatif olarak, bu biçimi kullanabilirsiniz:

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

aşağıdaki dokümantasyon çıktısını verecektir:

    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

Temiz bir çözüm bir sınıf yazmak ve bunu geri vermektir.

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

Bunu yaptığımda ancak Google Closure Derleyici'yi kullandığımda bir uyarı alıyorum: "yapıcı olmayan bir örneği başlatamıyorum". (@Return yukarıda) işlevine @constructor eklemeyi denedim ama yardımcı olmadı. Birisi bunu nasıl düzeltebileceğini biliyorsa, lütfen bana bildirin. Teşekkürler!
AndroidDev

2
Fonksiyonu nedeniyle @AndroidDev bu Pointkurucu değil gövdesini yerine o değişikliği, Pointbirlikte fonksiyonuthis.x = x; this.y = y;
Feirell

1
Burada yeni kullanmamızın nedenini göremiyorum, neden sadece Point (x, y) 'i döndürmüyorsunuz?
CHANist

@CHANist, newsözdizimi bir örnek oluşturmaktır constructor. Olmasaydı new, bağlam thisküresel bağlam olurdu. newEfekti görmeden bir örnek oluşturmayı deneyebilirsiniz .
Akash
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.