【问题标题】:TS2339: scrollLeft does not exist on type of GlobalEventHandlersTS2339:在 GlobalEventHandlers 类型上不存在 scrollLeft
【发布时间】:2019-10-18 02:28:35
【问题描述】:
 const el: HTMLElement = document.querySelector('.tip');
 el.onmouseout = function() {
    this.scrollLeft += 10;
 };

错误消息,TS2339:在 GlobalEventHandlers 类型上不存在 scrollLeftthis 点了el,怎么错了?

打字稿:3.7.0、3.5.2

【问题讨论】:

    标签: typescript ecmascript-6 this


    【解决方案1】:

    试试这个代码:

    const el: HTMLElement | null = document.querySelector('.tip');
    if (el) {
        el.onmouseout = () => { el.scrollLeft += 10;};
     }
    

    问题是 JS 中的所有函数都可以在更改上下文的情况下调用,例如:el.onmouseout.call(newContext, arg1, arg2, ...)el.onmouseout.apply(newContext, [arg1, arg2, ...])。所以你要做的是创建函数,然后将它分配给el 属性,所以这个函数对它的上下文一无所知,这就是你有错误的原因。而当你把this改成具体的常量时,TS就会知道它的类型,并且可以处理它

    【讨论】:

    • 上下文很清楚,操作正确。错误只是 eslint 认为上下文是当前类。
    猜你喜欢
    • 2021-08-21
    • 2016-03-14
    • 2017-02-25
    • 2021-11-24
    • 2019-01-11
    • 2021-05-08
    • 2021-10-15
    • 2022-12-21
    • 2020-12-13
    相关资源
    最近更新 更多