2016-10-14 1 views
3

Flow, кажется, не признают, что querySelector может возвращать подтипы из HTMLElement:Flow HTMLElement.querySelector возвращающий IFRAME

var myIframe = document.querySelector('iframe'); 

function foo(iframe: HTMLIFrameElement): void { 
    // I want to do iframe stuff! 
} 

foo(myIframe); 

Производит

10: foo(myIframe); 
     ^HTMLElement. This type is incompatible with 
6: function foo(iframe: HTMLIFrameElement): void { 
         ^HTMLIFrameElement 

На https://flowtype.org/try.

Есть ли способ, я могу типа myIframe, что позволит мне использовать обе свои HTMLElement свойства и его HTMLIFrameElement свойства, кроме как вводить Object?

ответ

7

Поток не знает, как разобрать селектор, что нужно будет сделать, чтобы понять, какой элемент будет возвращен. Он в состоянии понять более простой API , хотя, так it knows что getElementsByTagName('iframe') возвращает HTMLCollection<HTMLIFrameElement>.

Используя querySelector, вам необходимо его бросить. Что-то вроде этого:

var myIframe = ((document.querySelector('iframe'): any): HTMLIFrameElement);

+0

Спасибо за это, сосредоточил свой вопрос и указал мне на документацию для литья: https://flow.org/en/docs/types/casting/ – Ben

+0

Спасибо за это. Именно поэтому я понимаю, что вам нужно использовать «any», потому что он может вернуть коллекцию Elements? – mepler