Свойство TSLint 'не существует в поведении отладчика VS Firefox типа - PullRequest
0 голосов
/ 02 ноября 2018

Первый: извините за этот неточный заголовок. Я проясню вопрос.

В моей компании мы разрабатываем веб-приложения, используя TypeScript / React / JavaScript. Я использую VS Code как IDE с включенным tslint. Я продолжаю работу бывшего сотрудника.

В переменной хранится HTMLElement , и для него вызывается функция querySelector. Намерение состоит в том, чтобы получить элемент / тег с идентификатором «someID» и получить значение «offsetTop» этого элемента:

// elem is the HTMLElement
const tmp = elem.querySelector('[id=" + someID + "');
const offset_top = tmp.offsetTop;

В VS Code tslint выдает ошибку «Свойство offsetTop не существует для типа« Элемент ».» Это связано с тем, что querySelector возвращает элемент типа Element, но свойство HTTLElement определено для свойства offsetTop.

Теперь, когда я использую отладчик Chrome, разбить строку 'const tmp = ...' и показать свойства 'tmp', перемещая указатель мыши над переменной, он показывает свойство 'offsetTop'.

Почему?

Заранее спасибо

Редактировать

Мое решение сейчас:

const offset_top = tmp.firstChild.parentElement.offsetTop;

, который работает, но мне все еще очень интересно, почему отладчик firefox показывает это свойство.

1 Ответ

0 голосов
/ 02 ноября 2018

Первый ответ на ваш вопрос: Почему tslint указывает, что «Свойство offsetTop» не существует для типа «Элемент». Это потому, что Typescript имеет некоторый набор определенных типов, типов по умолчанию и пользовательских типов. Для машинописного текста Element является пользовательским типом, а типами по умолчанию являются число, строка, логическое значение. и любой. Поэтому, когда вы используете querySelector, который возвращает результат, тип которого Element, это, в свою очередь, меняет тип const tmp на Element, так как вы не объявили никакой тип для него.
ссылка: https://www.typescriptlang.org/docs/handbook/basic-types.html
Решение: установите тип вашей константы самостоятельно, выполнив это:

const tmp: any = elem.querySelector('[id=" + someID + "');
const offset_top = tmp.offsetTop;
...