如何在JSDoc中定义这个函数结构?

时间:2017-02-28 23:44:38

标签: javascript jsdoc

假设我有创建动态函数并返回它的函数。

Function获取String类型的数据参数并返回String

/**
 * @param {String} data
 * @returns {???}
 */
const foo = data => {
    let functionString = 'return data;'
    return Function('data', functionString)
}

我希望它能在VSCode Intellisense中以适当的定义显示出来。如何在JSDoc中记录它?

1 个答案:

答案 0 :(得分:1)

您可以使用namepath来记录内部成员。根据文件:

  

JSDoc 3中的名称路径

     

当引用文档中其他位置的JavaScript变量时,必须提供映射到该变量的唯一标识符。名称路径提供了一种方法,可以在实例成员,静态成员和内部变量之间消除歧义。

     

JSDoc 3中的名称路径的基本语法示例

myFunction
MyConstructor
MyConstructor#instanceMember
MyConstructor.staticMember
MyConstructor~innerMember // note that JSDoc 2 uses a dash

由于您要引用Function内部返回的内部foo,因此必须使用记录函数内部成员的最后一个选项。

要使用名称路径,必须使用标识符,以便JSDoc可以识别该成员,这可以通过声明文档中提到的变量来实现。您可以将返回值定义为变量并返回变量。因此:

/**
 * @param {String} data
 * @returns {foo~newFunction}
 */
const foo = data => {
    let functionString = 'return data;'

    /**
     * Notice the idenfier newFunction given to the member
     * You can now document the function here
     */
    let newFunction = Function('data', functionString)
    return newFunction
}

通过上述内容,我们将前一个返回值定义为名为newFunction的变量。因此,我们可以使用名称路径将其引用为foo~newFunction,因为它现在是foo的内部成员,然后将其设置为foo的返回值。然后,您可以返回newFunction