如何在 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
我有一个包含 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