JavaScript JSDoc 和 Visual Studio Code:正确记录函数属性

问题描述 投票:0回答:1

TLDR 版本是:我想使用 JSDoc 在 JavaScript 中记录一个外部“类”,其中属性之一是带有命名参数的函数(方法),并让它以可读的方式显示在 Visual Studio Code 中。我尝试了 3 种不同的方法,但没有一个能达到我想要的效果。

最接近的是这种方法,也是我目前正在使用的:

/**
 * @typedef Zzz_BaseObject
 * @type {object}
 * @property {function(string):Zzz_Value} getValue Returns the Value held by this Node/Edge for the attribute with the given id.
 */

这在 VSCode 中显示如下:

请注意,该参数没有名称(只有 arg0)。如果我指定一个名称: function(id:string) 那么它根本无法理解该属性(在 VSCode 中,即鼠标悬停不执行任何操作)。

我也尝试过:

/**
 * This is a predefinition of the method that is inside the Object
 * It will be used as the type at @property {Type} for the method
 * @typedef {Function} getValueFunction
 * @param {String} attributeID
 * @returns {Zzz_Value}
 */

 * @property {getValueFunction} getValue Returns the Value held by this Node/Edge for the attribute with the given id.

这导致只是说该属性是一个函数(没有更多信息)

我也尝试过:

/**
 * @typedef {(attributeId:string) => Zzz_Value} getValueFunction2
*/

然后说属性的类型是 getValueFunction2.... 但没有更多信息。

现在,血淋淋的细节(跳过,与主要问题无关,只是为什么明显的解决方法不起作用)。

需要明确的是,我想要的是 VSCode 在鼠标悬停时说: (property) getValue: (attributeId: string) => Zzz_Value

  1. 我不能使用 typescript,因为该工具只能理解 javascript,并且没有允许我使用 typescript 并将其集成的集成系统。我希望我可以,因为这样会容易得多。
  2. 我无法定义实际的类和接口(使用 JSDoc),因为实际的实现位于工具内部,所以我只能使用 typedef 来描述“导出的”类型。
javascript visual-studio-code jsdoc
1个回答
0
投票

你就快到了。您有正确的类型签名:

(attributeId: string) => Zzz_Value

所以你应该用它来声明

getValue
Zzz_BaseObject
属性值:

/**
 * @typedef {object} Zzz_BaseObject
 * @property {(attributeId: string) => Zzz_Value} getValue Returns the Value held by this Node/Edge for the attribute with the given id.
 */

它应该给你悬停像:

© www.soinside.com 2019 - 2024. All rights reserved.