如何在 JSDoc 中向数组添加属性?

How to add properties to an array in JSDoc?

我有一个包含 Series 个对象的数组。

它是一个规则的对象数组,通过与此类似的代码添加了一个函数:

let series = loadSeriesFromDatabase();
series.getByName = (name)=>{return series;}

我现在尝试通过多种方式将此函数(getByName) 添加到SeriesList 中。我最接近的是将系列记录为 {Object} 并像这样添加它:

/**
 * @callback GetByNameFn
 * @param {string} name Name of the series
 * @returns {Series} The series that matches given name
 */
/**
 * @typedef {Object} SeriesList
 * @property {GetByNameFn} getByName
 */
/**
 * @type {SeriesList}
 */
let series = [];

但这使得系列不是 Series[] 而是 Object,这不是我想要的...

上面的代码将 getByName 识别为函数,但是如果我将其更改为 @typedef {Series[]} SeriesList 它会停止工作...

有没有办法让它也能与数组一起工作,还是我做错了?

按你现在的方式做有点奇怪。

如果我们稍微改变一下会怎样

/**
 * @typedef Series yow Obj.
 * @property {number} id identifier.
 * @property {string} firstName the firstName.
 * @property {string} lastName the lastName.
 *
 * @callback GetByNameFn
 * @param {string} name Name of the series.
 * @returns {Series} The series that matches given name.
 *
 * @typedef {Array<Series>} SeriesList
 *
 * @typedef SeriesWrapper
 * @property {SeriesList} list The list of all yow `Series`.
 * @property {GetByNameFn} getByName
 *
 */

/**
 * @type {SeriesWrapper}
 */
const data = {
    list: [
            {id:1, firstName: "troll-1", lastName: "trollmon-1"},
            {id:2, firstName: "troll-2", lastName: "trollmon-2"},
            {id:3, firstName: "troll-3", lastName: "trollmon-3"},
            {id:4, firstName: "troll-4", lastName: "trollmon-4"},
        ],
    getByName: function (name) {
        // code
    }
}

使用列表创建对象 属性 并向其中添加项目。

const yowObj = {
  list: [],
  func: ()=>
};

我已经采取了您最初的尝试并修改了 JSDocs 以获得我认为您正在寻找的结果。

拥有系列列表的功能也存在。

/**
 * @callback GetByNameFn
 * @param {string} name Name of the series
 * @returns {Series} The series that matches given name
 */
/**
 * @typedef {Object} SeriesFunctions
 * @property {GetByNameFn} getByName
 */
/**
 * @typedef {object} Series
 * @property {string} name
 * @property {int} year
 */
/**
 * @type {Series[]&SeriesFunctions}
 */
let series = [];

// Usage
series.getByName();

// Other Usage for the autocomplete fields.
series[0].name