我有以下代码:
const metricsInputEl = document.querySelector(
'input[name="metrics"]',
);
const value = metricsInputEl.value;
但是我收到以下Flow错误:
Cannot get metricsInputEl.value because:
• property value is missing in HTMLElement [1].
如何解决这个问题?
以下方法可行,但我并不热衷于此,因为不会instanceof
支票被剥夺,并且我不希望它成为我的捆绑包的一部分,并且在运行时进行多余的类型检查。
const metricsInputEl = document.querySelector(
'input[name="metrics"]',
);
if (metricsInputEl instanceof HTMLInputElement) {
const value = metricsInputEl.value;
}
答案 0 :(得分:1)
我认为您也许可以利用Flow的Comment Types。您可以在Flow注释内执行instanceof
检查,这将满足Flow的类型系统,但应由编译器删除。
const metricsInputEl = document.querySelector(
'input[name="metrics"]',
);
/*::
if (!(metricsInputEl instanceof HTMLInputElement)) {
throw new Error('element is not of type HTMLInputElement');
}
*/
const value = metricsInputEl.value;
请注意,由于带有name="metrics"
的元素不能保证是HTMLInputElement
,所以这很危险,但是如果您确信这将永远是正确的,那么它可能是一种很好的方法满足Flow。