Jsdoc'da “object” argümanlarını nasıl tarif edebilirim?


316
// My function does X and Y.
// @params {object} parameters An object containing the parameters
// @params {function} callback The callback function
function(parameters, callback) {
}

Ancak parametre nesnesinin nasıl yapılandırılması gerektiğini nasıl anlarım? Örneğin şöyle bir şey olmalı:

{
  setting1 : 123, // (required, integer)
  setting2 : 'asdf' // (optional, string)
}

Yanıtlar:


428

Gönderen @param wiki sayfasından :


Özellikleri Olan Parametreler

Bir parametrenin belirli bir özelliğe sahip olması bekleniyorsa, o parametrenin @param etiketinden hemen sonra bunu şöyle belgeleyebilirsiniz:

 /**
  * @param userInfo Information about the user.
  * @param userInfo.name The name of the user.
  * @param userInfo.email The email of the user.
  */
 function logIn(userInfo) {
        doLogIn(userInfo.name, userInfo.email);
 }

Eskiden, karşılık gelen @param'ı hemen takip eden bir @config etiketi vardı, ancak kullanımdan kaldırılmış gibi görünüyor ( örnek burada ).


17
maalesef döner etiketi eşdeğer olması görünmüyor code.google.com/p/jsdoc-toolkit/wiki/TagReturns
Michael Bylstra

1
Bu benzer cevapta stackoverflow.com/a/14820610/3094399 da başlangıçta @param {Object} seçeneklerini eklediler. Yine de gereksiz olabilir sanırım.
pcatre

ES6 yıkım parametreleriyle ilgili bir örneğiniz var mı? Benim durumumda actionismim yok, `foo = ({arg1, arg2, arg2}) => {...}` yazıyorum. Düzenle: burada soru stackoverflow.com/questions/36916790/…
Eric Burel

herhangi bir fikir seçeneği olan bir nesne üyesi belge nasıl? Yani kullanıcı nesnemin kullanıcı adı olmalı ve tam adı olabilir. tam adın isteğe bağlı olduğunu nasıl belirleyebilirim
Yash Kumar Verma

167

Şimdiye kadar nesneleri parametre / tür olarak belgelemenin 4 farklı yolu vardır. Her birinin kendi kullanımları vardır. Geri dönüş değerlerini belgelemek için sadece 3 tanesi kullanılabilir.

Bilinen bir özellik kümesine sahip nesneler için (Varyant A)

/**
 * @param {{a: number, b: string, c}} myObj description
 */

Bu sözdizimi, yalnızca bu işlev için parametre olarak kullanılan ve her özelliğin daha fazla açıklanmasını gerektirmeyen nesneler için idealdir. Bu kullanılabilir @returnsyanı .

Bilinen bir özellik kümesine sahip nesneler için (Varyant B)

Özellikler sözdizimine sahip parametreler çok yararlıdır :

/**
 * @param {Object} myObj description
 * @param {number} myObj.a description
 * @param {string} myObj.b description
 * @param {} myObj.c description
 */

Bu sözdizimi, yalnızca bu işlev için parametre olarak kullanılan ve her özelliğin daha fazla açıklanmasını gerektiren nesneler için idealdir. Bu için kullanılamaz @returns.

Kaynakta birden fazla noktada kullanılacak nesneler için

Bu durumda @typedef çok kullanışlı olur. Eğer kaynağında bir noktada tipini tanımlamak ve bir tip olarak kullanabilirsiniz @paramveya @returnsbir tip yararlanabilirler diğer JSDoc etiketleri ya da.

/**
 * @typedef {Object} Person
 * @property {string} name how the person is called
 * @property {number} age how many years the person lived
 */

Daha sonra bunu bir @parametikette kullanabilirsiniz:

/**
 * @param {Person} p - Description of p
 */

Veya @returns:

/**
 * @returns {Person} Description
 */

Değerleri aynı türde olan nesneler için

/**
 * @param {Object.<string, number>} dict
 */

İlk tür (dize), JavaScript'te her zaman bir dize olan veya en azından her zaman bir dizeye zorlanacak olan anahtarların türünü belgeler. İkinci tip (sayı), değerin tipidir; bu herhangi bir tür olabilir. Bu sözdizimi şunlar için kullanılabilir@returns .

kaynaklar

Dokümanlama türleri hakkında yararlı bilgiler burada bulunabilir:

https://jsdoc.app/tags-type.html

Not:

isteğe bağlı bir değeri belgelemek için şunları kullanabilirsiniz []:

/**
 * @param {number} [opt_number] this number is optional
 */

veya:

/**
 * @param {number|undefined} opt_number this number is optional
 */

Değişken 1, birden çok mülk türüyle çalışır mı? Gibi {{dir: A|B|C }}mi?
CMCDragonkai

Burada herhangi bir ek açıklama mümkün olmalıdır, bu yüzden evet
Simon Zyx

Ve anahtarları dinamik olarak oluşturulan nesneler için? Beğen{[myVariable]: string}
Frondor

135

@Return etiketi hakkında zaten bir yanıt olduğunu görüyorum, ancak bu konuda daha fazla ayrıntı vermek istiyorum.

Her şeyden önce, resmi JSDoc 3 belgeleri bize özel bir nesne için @return hakkında hiçbir örnek vermiyor. Lütfen https://jsdoc.app/tags-returns.html adresine bakın . Şimdi, bir standart görünene kadar neler yapabileceğimize bakalım.

  • İşlev, anahtarların dinamik olarak oluşturulduğu nesneyi döndürür. Örnek: {1: 'Pete', 2: 'Mary', 3: 'John'}. Genellikle, bu nesnenin yardımıylafor(var key in obj){...} .

    Göre Muhtemel JSDoc https://google.github.io/styleguide/javascriptguide.xml#JsTypes

    /**
     * @return {Object.<number, string>}
     */
    function getTmpObject() {
        var result = {}
        for (var i = 10; i >= 0; i--) {
            result[i * 3] = 'someValue' + i;
        }
        return result
    }
  • İşlev, anahtarların bilinen sabitler olduğu nesneyi döndürür. Örnek: {id: 1, title: 'Hello world', type: 'LEARN', children: {...}}. Biz kolayca bu nesnenin özelliklerini erişebilirsiniz: object.id.

    Göre Muhtemel JSDoc https://groups.google.com/forum/#!topic/jsdoc-users/TMvUedK9tC4

    • Sahte.

      /**
       * Generate a point.
       *
       * @returns {Object} point - The point generated by the factory.
       * @returns {number} point.x - The x coordinate.
       * @returns {number} point.y - The y coordinate.
       */
      var pointFactory = function (x, y) {
          return {
              x:x,
              y:y
          }
      }
    • Tam Monty.

      /**
       @class generatedPoint
       @private
       @type {Object}
       @property {number} x The x coordinate.
       @property {number} y The y coordinate.
       */
      function generatedPoint(x, y) {
          return {
              x:x,
              y:y
          };
      }
      
      /**
       * Generate a point.
       *
       * @returns {generatedPoint} The point generated by the factory.
       */
      
      var pointFactory = function (x, y) {
          return new generatedPoint(x, y);
      }
    • Bir tür tanımlayın.

      /**
       @typedef generatedPoint
       @type {Object}
       @property {number} x The x coordinate.
       @property {number} y The y coordinate.
       */
      
      
      /**
       * Generate a point.
       *
       * @returns {generatedPoint} The point generated by the factory.
       */
      
      var pointFactory = function (x, y) {
          return {
              x:x,
              y:y
          }
      }

    Göre Https://google.github.io/styleguide/javascriptguide.xml#JsTypes'e

    • Kayıt türü.

      /**
       * @return {{myNum: number, myObject}}
       * An anonymous type with the given type members.
       */
      function getTmpObject() {
          return {
              myNum: 2,
              myObject: 0 || undefined || {}
          }
      }

Bunu IntelliJ / Webstorm'da üretmenin bir yolunun farkında olan var mı? Özellikle üçüncü seçenek hakkında konuşuyorum - bir tür tanımlayın.
Erez Cohen

Lütfen detaylandırın. Bu dokümanı oluşturmak için IDE'de bazı kısayol tuşlarına veya kısayollara sahip olmak mı istiyorsunuz yoksa IDE'nizin bu dokümanı anlamasını mı istiyorsunuz? Her ikisi de olabilir mi?
vogdb

@vogdb, lütfen bu konuya bir göz atabilir misiniz? Bu kullanım
Pavel Polyakov

@PavelPolyakov Baktım. Sorunuzu nasıl cevaplayacağınızı gerçekten bilmiyorum. Bir süreliğine JS dışındayım. Yeni bir bilginiz varsa cevabımı düzenlemekte serbestsiniz.
vogdb


2

Bir parametrenin belirli bir özelliğe sahip olması bekleniyorsa, ek bir @param etiketi sağlayarak bu özelliği belgeleyebilirsiniz. Örneğin, bir çalışan parametresinin ad ve departman özelliklerine sahip olması bekleniyorsa, bunu aşağıdaki gibi belgeleyebilirsiniz:

/**
 * Assign the project to a list of employees.
 * @param {Object[]} employees - The employees who are responsible for the project.
 * @param {string} employees[].name - The name of an employee.
 * @param {string} employees[].department - The employee's department.
 */
function(employees) {
    // ...
}

Bir parametre açık bir ad olmadan yıkılırsa, nesneye uygun bir parametre verebilir ve özelliklerini belgeleyebilirsiniz.

/**
 * 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({ name, department }) {
    // ...
};

Kaynak: JSDoc


0

@configBu durumlar için yeni bir etiket var. Öncekine bağlanırlar @param.

/** My function does X and Y.
    @params {object} parameters An object containing the parameters
    @config {integer} setting1 A required setting.
    @config {string} [setting2] An optional setting.
    @params {MyClass~FuncCallback} callback The callback function
*/
function(parameters, callback) {
    // ...
};

/**
 * This callback is displayed as part of the MyClass class.
 * @callback MyClass~FuncCallback
 * @param {number} responseCode
 * @param {string} responseMessage
 */

1
@configEtiketin belgelerine işaret edebilir misiniz ? Buldum usejsdoc.org üzerinde hiçbir şey ve bu sayfayı önerir @configkullanımdan kaldırıldı.
Dan Dascalescu

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.