首页 > 解决方案 > 如何使用 JSDoc 记录返回具有公共方法的对象的工厂函数?

问题描述

我有以下工厂功能:

/**
 * Create a CRUD interface
 * @param {string} collectionName Name of the table/collection on the API side
 * @return {Object}
 */
export default function createCrudInterface(collectionName) {
  return {
    /**
     * Create a new item
     * @param {Object} data JSON request data
     * @param {import('./api-call').ApiOptions} [apiOptions] API call options
     * @return {Promise}
     */
    create(data, apiOptions) {
      return apiCall('POST', `/${collectionName}`, null, data, apiOptions);
    },

    /**
     * Gets one or more items
     * @param {(string|number)} [id] ID of item
     * @param {Object} [queryParams] Query parameters
     * @param {import('./api-call').ApiOptions} [apiOptions] API call options
     * @return {Promise}
     */
    get(id, queryParams, apiOptions) {
      return apiCall(
        'GET',
        `/${collectionName}` + (id && `/${id}`),
        queryParams,
        null,
        apiOptions
      );
    },

    /**
     * Update an item
     * @param {(string|number)} id ID of item
     * @param {Object} data JSON request data
     * @param {import('./api-call').ApiOptions} [apiOptions] API call options
     * @return {Promise}
     */
    update(id, data, apiOptions) {
      return apiCall('PUT', `/${collectionName}/${id}`, null, data, apiOptions);
    },

    /**
     * Delete one or more items
     * @param {(string|number|string[]|number[])} idOrIds ID of item
     * @param {import('./api-call').ApiOptions} [apiOptions] API call options
     */
    delete(idOrIds, apiOptions) {
      const batch = Array.isArray(idOrIds);

      return apiCall(
        'DELETE',
        `/${collectionName}` + (batch ? '' : `/${idOrIds}`),
        null,
        batch ? { ids: idOrIds } : null,
        apiOptions
      );
    },
  };
}

似乎会起作用,但它不会:

const blah = createCrudInterface('blah');

当我输入blah.create(时,VS Code IntelliSense 不知道该建议什么。它不是拉我定义的方法 JSDoc。

这样做的正确方法是什么?

标签: javascriptjsdocjsdoc3

解决方案


推荐阅读