如何在 JSDoc 中指定类的类型(而不是其实例)

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

我有课:

class Model { 
  static get schema() { }   // static property 'schema'
}
class CustomModel_1 extends Model { }
. . .
class CustomModel_N extends Model { }

我想声明一个带有指定模型类型(不是此类型的实例)的参数的新函数:

/**
* @param {Model} ModelType  <== it is a wrong type because it is an instance of Model
*/
function doSomething(ModelType) {
  const schema = ModelType.schema // <== WebStorm emphasizes 'schema'
}

如何在 JSDoc 中指定它?表达式

{Model}
无效,因为它指定了 Model 的实例。

javascript jsdoc
2个回答
7
投票

您不妨尝试一下:

/**
 * @param {Model.constructor} ModelType
 */
function doSomething(ModelType) {
  // ...
}

也就是说,您可以通过对象(本质上是类)的

constructor
属性来引用对象(本质上是类)的构造函数,该属性是任何 JavaScript 对象的内置属性。

根据您的环境,您可能还想尝试以下操作:

/**
 * @param {typeof Model} ModelType
 */

JSDoc 使用的 Closure Compiler 支持此类型表达式,尽管我个人没有使用它,因为我的工具链的一部分不支持此特定语法。

另请参阅这个 JSDoc Typeof Plugin,这是最终在 VSCode 中为我工作的解决方案。


0
投票

有谁知道如何让它在 Visual Studio Code (vscode) 上工作?

@Darren 上面说“这是最终在 VSCode 中为我工作的解决方案”,但我无法让 VSCode 加载插件

没有办法告诉 VSCode“加载”JSDoc Typeof 插件(jsdoc-typeof-plugin),似乎没有任何关于如何将插件添加到 VSCode 的 jsdoc 的指南/参考/文档。我找不到任何允许我配置其 jsdoc 的 VSCode 文件。

我尝试只使用

/**
 * @param {typeof Model} ModelType
 */

而且根本不起作用。

还有其他替代语法可以让它工作吗?

PS:我无法在@Darren 的帖子中添加评论,这将是提出这个问题的理想方式。

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