Типы потока - приведение HTMLElement к HTMLInputElement - PullRequest
0 голосов
/ 03 июля 2019

У меня есть следующий код:

const metricsInputEl = document.querySelector(
  'input[name="metrics"]',
);

const value = metricsInputEl.value;

Но я получаю следующую ошибку потока:

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 Ответ

1 голос
/ 03 июля 2019

Думаю, вы сможете воспользоваться типами комментариев Flow .Вы можете выполнить проверку instanceof внутри комментария Flow, которая будет удовлетворять системе типов 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...