Spec-Zone.ru › Flow

Подавления ошибок

Подавление — это специальный комментарий (например, // $FlowFixMe[incompatible-type]), помещаемый непосредственно перед строкой с ошибкой типов Flow и указывающий Flow не сообщать об этой ошибке. Подавления небезопасны: они отключают проверку типов, не устраняя основную проблему, поэтому подавление может скрыть реальную ошибку так же легко, как и ложное срабатывание. Используйте подавление только в том случае, если вы уверены, что ваш код корректен, но Flow сообщает об ошибке излишне строго, или если вы планируете исправить ошибку позже.

Flow сообщает о множестве разных видов ошибок, вызванных распространёнными ошибками программирования, но Flow способен понять не все шаблоны JavaScript. Если вы уверены, что ваш код корректен, а Flow сообщает об ошибке излишне строго, можно подавить её, чтобы Flow о ней не сообщал.

Сравнение с TypeScript

И $FlowFixMe[code] в Flow, и // @ts-ignore в TypeScript размещаются на строке перед ошибкой и применяются к следующей строке. Разница заключается в области действия: Flow подавляет только ошибку с указанным кодом, поэтому любая другая ошибка в этой строке всё равно будет показана; TS без разбора подавляет все ошибки в строке. Подробнее см. в разделе Сравнение подавления ошибок в Flow и TypeScript.

Что такое подавление?​

Подавление — это особый вид комментария, который можно поместить перед строкой с ошибкой типов. Он указывает Flow не сообщать об этой ошибке при проверке кода. Комментарии для подавления выглядят так:

// <SUPPRESSOR>[<CODE>] extra text

Для подавления можно использовать один из следующих вариантов:

  • $FlowFixMe: для ошибок типов, которые вы планируете исправить позже
  • $FlowExpectedError: для места, где вы ожидаете, что Flow сообщит об ошибке типов (например, при выполнении недопустимого приведения типа).

Часть <CODE> в подавлении обязательна. Она указывает, на какой код ошибки действует подавление.

Примеры комментариев для подавления:

// $FlowFixMe[incompatible-type]

// $FlowExpectedError[incompatible-type]

/* $FlowFixMe[prop-missing] some other text here */

/* $FlowExpectedError[incompatible-type] this
    is a multi-line
    comment */

{ /* $FlowExpectedError[cannot-resolve-name] this is how you suppress errors inside JSX */ }

Кроме того, чтобы комментарий считался допустимым комментарием для подавления, должны выполняться следующие условия:

  • Перед директивой подавления и между ней и кодом не должно быть текста. Например, // some text then $FlowFixMe — недопустимое подавление, как и // $FlowExpectedError some text [incompatible-type] или //$FlowFixMe [prop-missing] (обратите внимание на пробел!).
  • Подавление должно находиться непосредственно перед строкой с ошибкой, которую оно подавляет, иначе оно не будет применено.

Более точная настройка подавлений с помощью кодов ошибок​

У подавлений должны быть коды ошибок. Подавляемым ошибкам Flow также соответствует код ошибки. Этот код кратко описывает тип проблемы, о которой сообщает ошибка, и различается для разных видов ошибок.

Чтобы подавление не подавляло ошибки типов разных видов в одной строке (подавления без кода ошибки отклоняются — для них выдаётся ошибка об отсутствии кода, — поэтому каждое подавление должно указывать код, ограничивающий его одним видом ошибки в следующей строке), можно добавить код ошибки в подавление. Например, // $FlowFixMe[incompatible-type] подавит только ошибки с кодом incompatible-type. Таким образом:

// $FlowFixMe[incompatible-type]
3 as string;

ошибок не сообщит, но

// $FlowFixMe[prop-missing]
3 as string; // Error

ошибка несовместимости типов всё равно будет сообщена.

Чтобы подавить несколько кодов ошибок в одной строке, можно расположить комментарии для подавления один за другим: все они будут применены к первой строке без комментария, например:

let y: number | {x : number}  = 1;


// $FlowFixMe[incompatible-type]
// $FlowFixMe[prop-missing]
y.x as string;

Это подавит обе ошибки в этой строке.

Неподавляемые ошибки​

Некоторые виды ошибок можно сделать неподавляемыми. Например, чтобы сделать ошибки react-rule-hook-naming-convention и react-rule-hook-conditional неподавляемыми, добавьте следующее в раздел [options] файла .flowconfig:

unsuppressable_error_codes=react-rule-hook-naming-convention
unsuppressable_error_codes=react-rule-hook-conditional

© 2013–present Facebook Inc.
Licensed under the MIT License.
https://flow.org/en/docs/errors

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API