Убедитесь, что флажок установлен в TypeScript

У меня есть флажок в моем html файле.

<input id="is3dCheckBox" type="checkbox" checked="checked" />

и я хочу знать в файле .ts, если этот флажок установлен или нет.
Что делать после того, как я получу этот элемент, чтобы проверить его?

Ответы

Ответ 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. Надеюсь, вам не придется слишком часто использовать подобное утверждение типа.

Ответ 2

Для documet.getElementById вы можете использовать:

let element = <HTMLInputElement> document.getElementById("is3dCheckBox");  
if (element.checked) { you code }

Для documet.getElementsByName вы можете использовать:

let element = <any> document.getElementsByName("is3dCheckBox");  
if (element.checked) { you code }