javascript-@override方法,Google Closure编译器

我正在尝试重写超类的方法,并使用Google Closure Compiler编译代码,但是我收到有关错误类型的警告.

/Users/Jan/dev/cro/public/app/js/LibraryController.js:55: WARNING -
  mismatch of the setState property type and the type of the property it overrides
  from superclass app.Controller
original: function (this:app.Controller, Object): undefined
override: function (this:app.LibraryController, Object, string, string): undefined
app.LibraryController.prototype.setState = function (state, section, article) {

如您所见,我既没有更改super方法接受的参数的类型,也没有更改返回的类型.

有谁知道如何解决这个问题?谢谢.

为了澄清,这里是各个方法的定义.

/**
 * @param {!Object} state The new state.
 */
app.Controller.prototype.setState = function (state) { ... };

/**
 * @param {!Object} state The new state.
 * @param {string} section A section ID.
 * @param {string} article An article ID.
 * @override
 */
app.LibraryController.prototype.setState = function (state, section, article) { ... }

解决方法:

重写的方法必须具有相同(或至少非常相似)的签名.具体来说,子类方法必须能够在可以使用基类的任何地方使用.查看完整的讨论:https://groups.google.com/d/topic/closure-compiler-discuss/o_CMZAvFOLU/discussion

您在上面发布的错误消息表明,覆盖方法比原始不允许的参数具有更多的必需参数.但是,您可以有更多可选参数.

上一篇:如何在以下Javascript函数中将“ this”的用法注释给Closure Compiler?


下一篇:js开发文档生成工具jsdoc安装使用