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

How to define this function structure in JSDoc?

假设我有一个创建动态函数的函数 returns 它。

Function 采用 String 和 returns String.

类型的数据参数

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

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

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

Namepaths in JSDoc 3

When referring to a JavaScript variable that is elsewhere in your documentation, you must provide a unique identifier that maps to that variable. A namepath provides a way to do so and disambiguate between instance members, static members and inner variables.

Basic Syntax Examples of Namepaths in JSDoc 3

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

因为您想在 foo 中引用 returned 内部 Function,您必须使用最后一个选项来记录函数的内部成员。

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

/**
 * @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
}

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