// My function does X and Y.
// @params {object} parameters An object containing the parameters
// @params {function} callback The callback function
function(parameters, callback) {
}
Mais comment puis-je décrire comment l’objet de paramètres doit être structuré? Par exemple, cela devrait être quelque chose comme:
{
setting1 : 123, // (required, integer)
setting2 : 'asdf' // (optional, string)
}
Depuis le @ param wiki page :
Si un paramètre doit avoir une propriété particulière, vous pouvez le documenter immédiatement après la balise @param pour ce paramètre, comme suit:
/**
* @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);
}
Il existait un tag @config qui suivait immédiatement le @param correspondant, mais il semble avoir été déconseillé ( exemple ici ).
Je vois qu'il existe déjà une réponse à propos de la balise @return, mais je souhaite donner plus de détails à ce sujet.
Tout d’abord, la documentation officielle de JSDoc 3 ne nous donne aucun exemple concernant le @return d’un objet personnalisé. Veuillez consulter https://jsdoc.app/tags-returns.html . Voyons maintenant ce que nous pouvons faire jusqu’à ce qu’une norme apparaisse.
La fonction retourne un objet où les clés sont générées dynamiquement. Exemple: {1: 'Pete', 2: 'Mary', 3: 'John'}
. Habituellement, nous parcourons cet objet à l'aide de for(var key in obj){...}
.
JSDoc possible selon 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
}
La fonction retourne un objet où les clés sont des constantes connues. Exemple: {id: 1, title: 'Hello world', type: 'LEARN', children: {...}}
. Nous pouvons facilement accéder aux propriétés de cet objet: object.id
.
JSDoc possible selon https://groups.google.com/forum/#!topic/jsdoc-users/TMvUedK9tC4
Fake It.
/**
* 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
}
}
Le plein 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);
}
Définir un type.
/**
@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
}
}
Selon https://google.github.io/styleguide/javascriptguide.xml#JsTypes
Le type d'enregistrement.
/**
* @return {{myNum: number, myObject}}
* An anonymous type with the given type members.
*/
function getTmpObject() {
return {
myNum: 2,
myObject: 0 || undefined || {}
}
}
A présent, il existe 4 manières différentes de documenter des objets en tant que paramètres/types. Chacun a ses propres utilisations. Cependant, seuls 3 d'entre eux peuvent être utilisés pour documenter les valeurs de retour.
Pour les objets ayant un ensemble de propriétés connu (variante A)
/**
* @param {{a: number, b: string, c}} myObj description
*/
Cette syntaxe est idéale pour les objets utilisés uniquement comme paramètres de cette fonction et ne nécessitant pas de description supplémentaire de chaque propriété. Il peut également être utilisé pour @returns
.
Pour les objets ayant un ensemble de propriétés connu (variante B)
La syntaxe paramètres avec propriétés est très utile:
/**
* @param {Object} myObj description
* @param {number} myObj.a description
* @param {string} myObj.b description
* @param {} myObj.c description
*/
Cette syntaxe est idéale pour les objets utilisés uniquement comme paramètres de cette fonction et nécessitant une description plus détaillée de chaque propriété. Ceci ne peut pas être utilisé pour @returns
.
Pour les objets qui seront utilisés à plusieurs reprises dans la source
Dans ce cas, un @ typedef est très utile. Vous pouvez définir le type en un point de votre source et l'utiliser comme type pour @param
ou @returns
ou d'autres balises JSDoc pouvant utiliser un type.
/**
* @typedef {Object} Person
* @property {string} name how the person is called
* @property {number} age how many years the person lived
*/
Vous pouvez ensuite l'utiliser dans une balise @param
:
/**
* @param {Person} p - Description of p
*/
Ou dans un @returns
:
/**
* @returns {Person} Description
*/
Pour les objets dont les valeurs sont toutes du même type
/**
* @param {Object.<string, number>} dict
*/
Le premier type (chaîne) documente le type des clés qui en JavaScript est toujours une chaîne ou du moins seront toujours forcées à une chaîne. Le deuxième type (nombre) est le type de la valeur; cela peut être n'importe quel type. Cette syntaxe peut également être utilisée pour @returns
.
Ressources
Des informations utiles sur les types de documentation peuvent être trouvées ici:
https://jsdoc.app/tags-type.html
PS:
pour documenter une valeur optionnelle, vous pouvez utiliser []
:
/**
* @param {number} [opt_number] this number is optional
*/
ou:
/**
* @param {number|undefined} opt_number this number is optional
*/
Pour la balise @return
, utilisez {{field1: Number, field2: String}}
, voir: http://wiki.servoy.com/display/public/DOCS/Annotating+JavaScript+using+JSDoc
Il existe une nouvelle balise @config
pour ces cas. Ils sont liés au précédent @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
*/