====== Приведение типов ====== Получение значения, которое не соответствует ожидаемому типу, является обычным делом для типизированных языков. Понимание причин, лежащих в основе несоответствий, а также всевозможные способы их разрешений, являются целями данной главы. ===== Приведение типов - общее ===== При разработке приложений на языках со статической типизацией время от времени может возникнуть нестыковка из-за несоответствия типов. Простыми словами, приходится работать с объектом, принадлежащим к известному типу, но ограниченному более специализированным (менее конкретным) интерфейсом. В TypeScript большинство операций с несоответствием типов приходится на работу с dom (Document Object Model). В качестве примера можно рассмотреть работу с таким часто используемым методом, как ''querySelector()''. Но для начала вспомним, что в основе составляющих иерархию dom-дерева объектов лежит базовый тип ''Node'', наделенный минимальными признаками, необходимыми для построения коллекции. Базовый тип ''Node'', в том числе, расширяет и тип ''Element'', который является базовым для всех элементов dom-дерева и обладает знакомыми всем признаками, необходимыми для работы с элементами dom, такими как атрибуты (attributes), список классов (''classList''), размеры клиента (''client*'') и другими. Элементы dom-дерева можно разделить на те, что не отображаются (унаследованные от ''Element'', как например ''script'', ''link'') и те, что отображаются (например ''div'', ''body''). Последние имеют в своей иерархии наследования тип ''HTMLElement'', расширяющий ''Element'', который привносит признаки, присущие отображаемым объектам, как, например, координаты, стили, свойство ''dataset'' и т.д. Возвращаясь к методу ''querySelector()'', стоит уточнить, что результатом его вызова может стать любой элемент, находящийся в dom-дереве. Если бы в качестве типа возвращаемого значения был указан тип ''HTMLElement'', то операция получения элемента ''