我有课:

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的实例。

最佳答案

您不妨尝试一下:

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


也就是说,您可以通过其constructor属性引用对象(本质上是类)的构造函数,该属性是任何JavaScript对象的内置属性。

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

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


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

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

09-07 15:44