Google Closure:如何注释用作构造函数的参数

时间:2013-05-17 14:17:19

标签: javascript intellij-idea google-closure webstorm

我使用 require.js 进行依赖关系管理和Google Closure注释,以使我能够自动完成(在WebStorm / IDEA中)。我们非常依赖 Backbone 并以类似Java的方式开发我们的Javascript代码 - 即使用静态和实例方法。

仍然难以理解的是如何正确编写实际类的函数参数的注释 - 与 new 关键字一起使用的参数。

require(['foo'], function(Foo) {
  var bar = new Foo();
});

如果我按如下方式注释参数,WebStorm和/或Google Closure正确地假设它是 Foo 的一个实例:

require(['foo'],
/** @param {Foo} Foo */ 
function(Foo) {
   Foo.<cursor> <-- gives me an autocompletion for an instance of Foo
});

quick googling建议使用函数(new:Foo)作为参数说明。但是,这种方法会失去构造函数参数和/或类可能的静态方法的自动完成。

我希望的构造应该类似于这个:

require(['foo'],
/** @param {Type<Foo>} Foo */
function(Foo) {
   Foo.<cursor> <-- gives me an autocompletion for statics of Foo
});

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:7)

您正在寻找

/** @param {function(new: Foo)} someConstructor */

您还可以通过执行类似

的操作来指定构造函数的参数
function(new: Foo, ArgType1, ArgType2)

docs的相关段落:

  

运营商名称:功能new类型:

     

语法示例:{function(new:goog.ui.Menu, string)}

     

一个带有一个参数(字符串)的函数,并在使用'new'关键字调用时创建goog.ui.Menu的新实例。

     

指定构造函数的构造类型。