TypeScript предоставляет определения типов только для уже существующих объектов, он не может изменить природу объекта. Итак, ваш вопрос о javascript, а не о машинописи.
Внутри lib.dom.d.ts
(библиотека определения типов, используемая Angular), объект MutationObserver
определен не очень правильно:
interface MutationObserver {
disconnect(): void;
observe(target: Node, options: MutationObserverInit): void;
takeRecords(): MutationRecord[];
}
, где target
определяется как Node
элемент.
HTMLElement
определен внутри того же файла, и он расширяет Element
, что расширяет Node
. Так что HTMLElement
не должно иметь никаких проблем с размещением внутри целевого свойства.
Лучшее определение типа:
observe<T extends Node>(target: T, options: MutationObserverInit): void;
Но так как это определение типа не было предоставлено, было бы лучше, если бы вы сказали компилятору, что это прекрасно, просто передав element as Node
внутри обратного вызова.