【问题标题】:Flow HTMLElement.querySelector returning an iframe流 HTMLElement.querySelector 返回一个 iframe
【发布时间】:2016-10-19 00:57:30
【问题描述】:

Flow 似乎无法识别 querySelector 可能返回 HTMLElement 的子类型:

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

除了输入Object之外,有什么方法可以让我同时使用HTMLElement 属性和HTMLIFrameElement 属性吗?

【问题讨论】:

    标签: javascript flowtype


    【解决方案1】:

    Flow 不知道如何解析选择器,它需要这样做才能了解将返回什么样的元素。不过它能够理解getElementsByTagName 的更简单的API,所以it knows getElementsByTagName('iframe') 返回HTMLCollection<HTMLIFrameElement>

    使用querySelector,您需要强制转换它。像这样的:

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

    【讨论】:

    • 谢谢你,解决了我的问题,并指出了铸造文档:flow.org/en/docs/types/casting
    • 谢谢。就我所知,您是否必须使用“any”进行投射,因为它可能会返回元素集合?
    猜你喜欢
    • 2012-12-08
    • 2017-01-14
    • 2012-02-03
    • 2012-04-19
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    相关资源
    最近更新 更多