我使用 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
});
有没有办法实现这个目标?
答案 0 :(得分:7)
您正在寻找
/** @param {function(new: Foo)} someConstructor */
您还可以通过执行类似
的操作来指定构造函数的参数function(new: Foo, ArgType1, ArgType2)
docs的相关段落:
运营商名称:功能
new
类型:语法示例:
{function(new:goog.ui.Menu, string)}
一个带有一个参数(字符串)的函数,并在使用'new'关键字调用时创建
goog.ui.Menu
的新实例。指定构造函数的构造类型。