假设我有创建动态函数并返回它的函数。
Function
获取String
类型的数据参数并返回String
。
/**
* @param {String} data
* @returns {???}
*/
const foo = data => {
let functionString = 'return data;'
return Function('data', functionString)
}
我希望它能在VSCode Intellisense中以适当的定义显示出来。如何在JSDoc中记录它?
答案 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
。