TS2339: scrollLeft не существует для типа GlobalEventHandlers - PullRequest
0 голосов
/ 18 октября 2019
 const el: HTMLElement = document.querySelector('.tip');
 el.onmouseout = function() {
    this.scrollLeft += 10;
 };

Сообщение об ошибке TS2339: scrollLeft не существует для типа GlobalEventHandlers . this просто очки el, почему не так?

Машинопись: 3.7.0, 3.5.2

1 Ответ

1 голос
/ 18 октября 2019

Попробуйте этот код:

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 узнает, что это за тип, и может обработать его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...