流类型-将HTMLElement转换为HTMLInputElement

时间:2019-07-02 23:42:44

标签: javascript flowtype

我有以下代码:

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;
}

1 个答案:

答案 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。