我正在使用谷歌的闭包编译器,我在构建时遇到以下错误:
path/to/file.js:...: WARNING - actual parameter 1 of Element.prototype.scrollIntoView does not match formal parameter
found : {behavior: string, block: string}
required: (boolean|undefined)
target.scrollIntoView({'block': 'start', 'behavior': 'smooth'});
^
显然,此处target
是Element
。
好的,所以看起来闭包想要一个布尔值,但是mdn似乎认为an object is a perfectly fine argument。 MDN引用https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview,因为它的定义同意(并且平滑滚动实际上适用于Firefox)。
看起来Closure定义了w3c_css.js
中的extern,它在注释中引用了http://www.w3.org/TR/cssom-view/#dom-element-scrollintoview。但是,看起来它们甚至没有正确的定义,因为w3.org
在签名中有2个(可选)参数,闭包似乎只允许传递1。
平滑滚动是一个不错的选择(我可能会在某些时候使用更好的跨浏览器解决方案替换这段代码),但与此同时,我如何沉默警告?
答案 0 :(得分:1)
向github项目提交拉取请求并为每个人修复:https://github.com/google/closure-compiler/blob/master/externs/browser/w3c_css.js#L2125 - 如果您不愿意这样做,我会为您完成。
定义您自己的extern覆盖签名:
/** @externs */
/**
* @suppress {duplicate}
* @param {(boolean|{behavior: string, block: string})=} opt_top
* @see http://www.w3.org/TR/cssom-view/#dom-element-scrollintoview
*/
Element.prototype.scrollIntoView = function(opt_top) {};