为闭包编译器修改内置外部
Modify builtin extern for closure compiler
我正在使用 google 的闭包编译器,但在构建时遇到了以下错误:
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 references https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview 因为它的定义是一致的(平滑滚动实际上在 Firefox 中有效)。
看起来 Closure 在注释中定义了 w3c_css.js
which references http://www.w3.org/TR/cssom-view/#dom-element-scrollintoview 中的外部。但是,看起来他们甚至没有正确的定义,因为 w3.org
在签名中有 2 个(可选)参数,闭包似乎只允许传递 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) {};
我正在使用 google 的闭包编译器,但在构建时遇到了以下错误:
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 references https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview 因为它的定义是一致的(平滑滚动实际上在 Firefox 中有效)。
看起来 Closure 在注释中定义了 w3c_css.js
which references http://www.w3.org/TR/cssom-view/#dom-element-scrollintoview 中的外部。但是,看起来他们甚至没有正确的定义,因为 w3.org
在签名中有 2 个(可选)参数,闭包似乎只允许传递 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) {};