const el: HTMLElement = document.querySelector('.tip');
el.onmouseout = function() {
this.scrollLeft += 10;
};
Сообщение об ошибке TS2339: scrollLeft не существует для типа GlobalEventHandlers. this
просто указывает на el
, почему неправильно?
Машинопись: 3.7.0, 3.5.2
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 узнает ее тип и сможет ее обработать.
Похожие вопросы
Новые вопросы
typescript
TypeScript — это типизированный надмножество JavaScript, транспилируемое в обычный JavaScript. Он добавляет в JavaScript необязательные типы, классы, интерфейсы и модули. Этот тег предназначен для вопросов, специфичных для TypeScript. Он не используется для общих вопросов по JavaScript.