メインコンテンツへスキップ

エラー抑制

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つのエラーの両方が抑制されます。