Ответ 1
Вам просто нужно использовать утверждение типа, чтобы сообщить TypeScript, что это HTMLInputElement:
var element = <HTMLInputElement> document.getElementById("is3dCheckBox");
var isChecked = element.checked;
Update:
Любые идеи, почему var element = document... работает, но элемент var: HTMLInputElement = document... не?
Когда вы используете getElementById
, возвращаемый элемент может быть любым элементом HTML. Например, это может быть тег абзаца. По этой причине определение типа для этого метода DOM возвращает очень общий тип HTMLElement
.
При попытке выполнить следующее:
var element: HTMLInputElement = document.getElementById('is3dCheckBox');
Компилятор предупреждает вас, что результат getElementById
не является HTMLInputElement
, либо подтипом HTMLInputElement
(потому что это фактически супертип того, который вы хотите).
Когда вы знаете тип элемента, совершенно нормально использовать утверждение типа, чтобы сообщить компилятору тип. Когда вы используете утверждение типа, вы сообщаете компилятору, что знаете лучше.
В некоторых случаях компилятор будет предупреждать вас при использовании утверждения типа, потому что он может сказать, что утверждение, вероятно, будет ошибкой, но вы все равно можете заставить его, но сначала увеличить тип:
var isChecked = (<HTMLInputElement><any>myString).checked;
Строковая переменная расширяется до типа any
, прежде чем утверждать HTMLInputElement
. Надеюсь, вам не придется слишком часто использовать подобное утверждение типа.