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.