如何将 @typedef 记录为 @memberof a @namespace

ken*_*n4z 6 javascript jsdoc visual-studio-code

我应该指出我正在使用 VSCode 作为我的 IDE

问题

如何记录 a@typedef使其成为 a 的成员@namespace?(我愿意使用@moduleJSDoc 或其他 JSDoc 标签来实现这一目标,但似乎最接近这种方法)

我正在开发一个 React 项目,并将我的域对象表示为实体

文件夹结构

- entities/
  - group/
    - group-actions.js
    - group-model.js
    - group-reducer.js
    - group-selectors.js
    - group-service.js
    - index.js
Run Code Online (Sandbox Code Playgroud)

索引.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;
Run Code Online (Sandbox Code Playgroud)

现在,我想定义一个接收 aGroupInstance作为 prop 的React 组件

在此输入图像描述

我希望members在智能感知下拉列表中看到,但没有。

现在,如果我将@property定义更改为,@property {Group} group我会在 @namespace 上获得智能感知

在此输入图像描述

小智 6

@typedef 的文档可以在https://jsdoc.app/tags-typedef.html#syntax找到。

我发现你有两个选择:

选项 1 是使用@typedef并附加数据类型,并包括单独的@name选项@memberOf 1 示例:

/**
* Your description goes here.
* @typedef {type}
* @memberOf module:your/module
* @name yourTypedefName
*/
Run Code Online (Sandbox Code Playgroud)

选项 2 是省略@name@memberOf,并使用数据类型定义完整路径@typedef - https://jsdoc.app/tags-typedef.html 选项 2 示例

/**
 * Your description goes here.
 * @typedef {Object} module:your/module.yourTypedefName
 */
Run Code Online (Sandbox Code Playgroud)

另外,您可以将 @type 与类型一起作为单独的行,然后对于选项 1,带有 @typedef 的行将只包含 @typedef。