Búsqueda de sitios web

javascript - Cómo documentar @typedef como @memberof de un @namespace


Debería señalar que estoy usando VSCode como mi IDE

Pregunta

¿Cómo documento un @typedef de modo que sea un miembro de un @namespace? (Estoy abierto a usar @module u otras etiquetas de JSDoc para lograr esto, pero parecía que me acercaba más con este enfoque)

Estoy trabajando en un proyecto de React y tengo mis objetos de dominio representados como entidades

estructura de carpeta

- entities/
  - group/
    - group-actions.js
    - group-model.js
    - group-reducer.js
    - group-selectors.js
    - group-service.js
    - index.js

index.js

import Actions from './group-actions';
import Model from './group-model';
import reducer from './group-reducer';
import Selectors from './group-selectors';
import Service from './group-service';

/**
 * GroupNamespace
 * @namespace Group
 */
const Group = {
  Actions,
  Model,
  reducer,
  Selectors,
  Service,
};

/**
 * Group
 * @typedef {Object} GroupInstance
 * @memberof Group
 * @property {Object[]} members
 * @property {Object} permissions
 */

export default Group;

Ahora, me gustaría definir un componente de React que reciba un GroupInstance como prop

Esperaría ver members en ese menú desplegable de intellisense, pero no lo hago.

Ahora, si cambio la definición de @property a @property {Group} group sí obtengo intellisense en el @namespace

Respuesta #1

La documentación para @typedef se encuentra en https://jsdoc.app/tags-typedef.html#syntax.

He encontrado que tienes dos opciones:

La opción 1 es usar @typedef y agregar el tipo de dato, e incluir @name y @memberOf por separado. Ejemplo de la opción 1:

/**
* Your description goes here.
* @typedef {type}
* @memberOf module:your/module
* @name yourTypedefName
*/

La opción 2 es omitir @name y @memberOf, y definir la ruta completa con el tipo de dato en @typedef - https://jsdoc.app/tags-typedef.html Ejemplo de la opción 2

/**
 * Your description goes here.
 * @typedef {Object} module:your/module.yourTypedefName
 */

Además, puedes poner @type en una línea separada también con el tipo, luego para la Opción 1, tu línea con @typedef solo tendrá @typedef en ella.