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