javascript - 流类型: use extended class from function returning parent class

标签 javascript flowtype

如何让流程将 document.getElementById 的返回值解释为 HTMLInputElement,而不是更通用的 HTMLElement

示例:

let input = document.getElementById('myinput');
console.log(input.value);


script.js:28
 28:   console.log(input.value);
                         ^^^^^ property `value`. Property not found in
 28:   console.log(input.value);
                   ^^^^^ HTMLElement

来自https://github.com/facebook/flow/blob/master/lib/dom.js

declare class Document extends Node {
  …
  getElementById(elementId: string): HTMLElement;
  …
}

但是,getElementById 可能会返回子类(在本例中为 HTMLInputElement)

declare class HTMLInputElement extends HTMLElement {
  …
  value: string;
  …
}

我希望能够访问输入元素的 value 属性,而不会引发错误。

最佳答案

问题是 Flow 编译器事先不知道 HTMLElement input 变量的类型,它会抛出错误。

通常建议人们在这种情况下这样做:

var input = document.getElementById('myinput');

if (input instanceof HTMLInputElement) {
    console.log(input.value);
}

dynamic type tests 中了解此技术文档部分。

关于javascript - 流类型: use extended class from function returning parent class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39427153/

相关文章:

javascript - string.match() 的流类型问题

javascript - Vim 错误格式多行字符串

flowtype - 应该如何构建不相交的联合包装器才能使细化发挥作用?

javascript - 在 Electron 项目中使用多个 JS 文件

javascript - 如何引用D3父元素的类?

javascript - 如果没有一个复选框被选中,则阻止表单提交

javascript - 流联合类型不会出错

javascript - 第一项后 IntelliSense 在 React Native 样式表中不起作用

javascript - JS中DOM对象的onclick到底是什么?

javascript - css flip counter - 无法设置正确的速度