錯誤抑制
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 */ }
要成為有效的抑制註解,還必須符合一些條件
- 抑制器前面不能有任何文字,也不能在抑制器和程式碼之間有文字。例如:
// 一些文字然後 $FlowFixMe
不是有效的抑制,// $FlowIssue 一些文字 [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;
這將抑制此行上的兩個錯誤。