我正在尝试覆盖超类的方法并使用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) {
正如您所看到的,我不会更改超级方法接受的参数类型,也不会更改返回的类型。
有谁知道如何解决此问题?感谢。
澄清一下,以下是各种方法的定义。
/**
* @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) { ... }
答案 0 :(得分:4)
重写方法必须具有相同(或至少非常相似)的签名。具体而言,Subclass方法必须能够在可以使用基类的任何地方使用。请参阅完整讨论:https://groups.google.com/d/topic/closure-compiler-discuss/o_CMZAvFOLU/discussion
您在上面发布的错误消息表明,覆盖方法的参数比原始参数多必需,这是特别不允许的。但是,您可以有更多可选参数。