4

我使用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
});

快速谷歌搜索建议使用function (new: Foo)作为参数描述。但是,这种方法会丢失构造函数参数和/或类可能具有的静态方法的自动完成功能。

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

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

有没有办法做到这一点?

4

1 回答 1

7

您正在寻找

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

您还可以通过执行类似的操作来指定构造函数的参数

function(new: Foo, ArgType1, ArgType2)

文档中的相关段落:

操作员姓名: 功能new类型:

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

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

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

于 2014-08-08T15:46:24.407 回答