Jsdoc:如何使用括号符号记录属性

jsdoc: how to document properties using bracket notation?

本文关键字:符号 记录 属性 何使用 Jsdoc      更新时间:2023-09-26

给定这个相当愚蠢的函数,应该如何为"range"参数编写文档?

/**
* @param {number} value
 * @param {Object} range
 * @param {number} range['<']
 * @param {number} range['<=']
 * @param {number} range['>']
 * @param {number} range['>=']
 */
function testIsInRange(value, range) {
    var threshold;
    if ((threshold = range['<'], threshold !== undefined) && !(value < threshold)) {
        fail('Value must be less than ' + threshold);
    }
    if ((threshold = range['<='], threshold !== undefined) && !(value <= threshold)) {
        fail('Value must be less than or equal to ' + threshold);
    }
    if ((threshold = range['>'], threshold !== undefined) && !(value > threshold)) {
        fail('Value must be greater than ' + threshold);
    }
    if ((threshold = range['>='], threshold !== undefined) && !(value >= threshold)) {
        fail('Value must be greater than or equal to ' + threshold);
    }
}

点和括号似乎都不起作用。可以识别属性类型(Object和number),但不能识别它们的名称。

类型可以指定为复杂对象:

/**
 * @param {number} value
 * @param {{'<': number, '<=': number, '>': number, '>=': number}} range
 */
function testIsInRange(value, range) {
    ...
}

或者,解构也可以提供帮助,尽管它需要将参数重命名为非符号名称:

/**
 * @param {number} value
 * @param {number} lt
 * @param {number} lte
 * @param {number} gt
 * @param {number} gte
 */
function testIsInRange(value, {'<':lt, '<=':lte, '>':gt, '>=':gte}) {
    ...
}