修改闭包编译器的内置extern
Modify builtin extern for closure compiler
我正在使用谷歌的闭包编译器,在构建时遇到以下错误:
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似乎认为对象是一个很好的参数。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个参数。
平滑滚动是一个很好的选择(我可能会在某个时候用更好的跨浏览器解决方案替换这段代码),但同时,我如何消除该警告?
永久答案
向github项目提交拉取请求并为每个人修复它:https://github.com/google/closure-compiler/blob/master/externs/browser/w3c_css.js#L2125 -如果你不喜欢这样做,我会为你做。
暂时回答
定义您自己的外部覆盖签名:
/** @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) {};
相关文章:
- jQuery中是否内置了任何字符串格式化函数
- 为什么可以't我访问Chrome内置功能$
- 正在寻找一种跨移动浏览器兼容的方式,通过内置麦克风进行录制
- 使用angularjs内置过滤器过滤代码中的特定属性
- 带有内置图像对象的Canvas组件构造函数;t显示's图像
- 挂钩到Rails内置远程:true'ajax:成功'事件
- 是否有任何内置方法可以更改JavaScript对象'的属性设置为某个值
- html元素是否具有内置的属性
- 为什么没有用于cookie的内置JS函数
- Java Selenium 2.0-在WebElement.click()之前使用内置滚动时处理z索引(navi)
- 我们如何自定义内置的 Angular “货币”过滤器
- AngularJS不覆盖内置验证器
- 角度和内置的javascript映射函数
- 无需Javascript内置函数即可将十进制转换为十六进制
- 在没有内置 Javascript 函数的情况下将基数 10 转换为其他基数 2 的数字
- 从函数向内置函数中添加多个参数
- 用摩卡测试失败的承诺'内置的promise支持
- 在javascript中定义内置类型的方法
- jQuery.remove()不起作用,而其他内置函数则起作用
- 修改闭包编译器的内置extern