エラー抑制
Flowは、多くの一般的なプログラミングミスに対して、さまざまな種類のエラーを報告しますが、すべてのJavaScriptパターンをFlowが理解できるわけではありません。コードが正しいと確信していて、Flowのエラー報告が過度に保守的である場合は、エラーを抑制してFlowが報告しないようにすることができます。
抑制とは?
抑制とは、型エラーの前の行に配置できる特別な種類のコメントです。これは、コードをチェックするときにFlowにそのエラーを報告しないように指示します。抑制コメントは次のようになります。
// <SUPPRESSOR>[<CODE>] extra text
サプレッサーは、次のいずれかです。
$FlowFixMe
:後で修正する予定の型エラー$FlowIssue
:Flowに問題があると思われる型エラー$FlowExpectedError
:Flowが型エラーを生成することを期待する場所(たとえば、無効な型キャストを実行するとき)。$FlowIgnore
:Flowにコードを無視させたい場所
すべてのサプレッサーは同じように動作することに注意してください。ここでは、参照しやすいように推奨される使用法に従うことをお勧めします。
抑制の<CODE>
部分はオプションですが、含める場合は、抑制が影響を与えるエラーコードを指定します。
抑制コメントのいくつかの例
// $FlowFixMe
// $FlowIssue[incompatible-type]
/* $FlowIgnore[prop-missing] some other text here */
/* $FlowFixMe[incompatible-cast] this
is a multi-line
comment */
{ /* $FlowIssue this is how you suppress errors inside JSX */ }
有効な抑制コメントであるためには、いくつかの条件も満たされている必要があります。
- サプレッサーの前、またはサプレッサーとコードの間にはテキストを入れることはできません。たとえば、
// some text then $FlowFixMe
は有効な抑制ではなく、// $FlowIssue some text [incompatible-type]
や//$FlowFixMe [prop-missing]
も同様です(ここにスペースがあることに注意してください)。 - 抑制は、抑制するエラーの直前の行にある必要があります。そうでない場合は適用されません。
エラーコードを使用して抑制をより細かくする
抑制可能なFlowエラーには、関連付けられたエラーコードも含まれます(バージョン0.127以降)。このコードは、エラーが報告する問題の種類を簡潔に記述し、異なる種類のエラー間で異なります。
抑制が同じ行で異なる種類の型エラーを抑制するのを防ぐために(デフォルトでは、コードのない抑制は次の行のすべてのエラーを抑制します)、エラーコードを抑制に追加できます。例:// $FlowFixMe[incompatible-cast]
は、incompatible-cast
コードのエラーのみを抑制します。したがって、
1// $FlowFixMe[incompatible-cast]23 as string;
はエラーを報告しませんが、
1// $FlowFixMe[prop-missing]23 as string;
2:1-2:1: Cannot cast `3` to string because number [1] is incompatible with string [2]. [incompatible-cast]
は依然として型互換性のないエラーを報告します。
同じ行で複数のエラーコードを抑制するには、抑制コメントを次々に重ねることができます。それらはすべて、次のような最初の非コメント行に適用されます。
1let y: number | {x : number} = 1;2
3// $FlowFixMe[incompatible-cast]4// $FlowFixMe[prop-missing]5y.x as string;
これにより、この行の2つのエラーの両方が抑制されます。