Существует ли допустимый тип typescript для SVG-документа, встроенного как HTML-объект?

#svg #typescript

#svg #typescript

Вопрос:

Я встраиваю объект SVG в HTML следующим образом:

 <object id='mapObject' type="image/svg xml" data="assets/maps/drawing.svg">
</object>
  

Затем я хочу получить доступ к нему из моих классов typescript (из Ionic 2, но это должно быть безразлично):

 let map = document.getElementById("mapObject");
let svgDoc = map.contentDocument;  // Get the inner SVG DOM
  

Это работает в браузере, но typescript жалуется на это:

Свойство typescript ‘contentDocument’ не существует для типа ‘HTMLElement’

И что еще хуже, он не работает на устройстве, потому что компилятор отказывается генерировать для него код.

Мой временный взлом / решение выглядит следующим образом:

 let svgDoc = (<HTMLIFrameElement>map).contentDocument;  // Get the inner SVG DOM
  

Это работает в устройстве, потому что HTMLIFrameElement имеет свойство contentDocument , но мне кажется, что typescript должен иметь определенный тип для этого. Однако я не смог его найти.

Кто-нибудь?

Ответ №1:

Вы можете привести / утвердить его в HTMLObjectElement, который имеет свойство contentDocument:

 let map = document.getElementById("mapObject") as HTMLObjectElement;
let svgDoc = map.contentDocument; // should be fine
  

Комментарии:

1. Вау, это было быстро. Я пропустил очевидный, HTMLObjectElement, при поиске в семействе SVGElement. Также спасибо за помощь, позволяющую избежать приведения в первую очередь. Так гораздо элегантнее 🙂