eslint/no-unsafe-negation 正しさ
何をするか
関係演算子の左側オペランドを否定することを禁止し、演算子の優先順位の誤解や誤った否定の使用による論理エラーを防止します。
このルールは、TypeScript コードでは無効化できます。なぜなら TypeScript コンパイラがこのチェックを強制するためです。
なぜ悪いのか
関係演算子の左側オペランドを否定すると、演算子の優先順位の影響で予期しない振る舞いが生じ、論理エラーにつながる可能性があります。たとえば、!a in b は意図した通り !(a in b) ではなく、(!a) in b として解釈されることがあります。
例
このルールに対して誤りなコードの例:
javascript
if (!key in object) {}
if (!obj instanceof Ctor) {}このルールに対して正しいコードの例:
javascript
if (!(key in object)) {}
if (!(obj instanceof Ctor)) {}設定
このルールは以下のプロパティを持つ設定オブジェクトを受け取ります。
enforceForOrderingRelations
type: boolean
default: false
enforceForOrderingRelations オプションは、順序関係演算子(<, >, <=, >=)の左辺に否定が許可されるかどうかを決定します。
この目的は、実際には !(a < b) を意図しているのに !a < b (これは (a ? 0 : 1) < b と等価)のような式を避けることです。
使い方
設定ファイルまたは CLI でこのルールを有効化するには、次のようにします:
json
{
"rules": {
"no-unsafe-negation": "error"
}
}bash
oxlint --deny no-unsafe-negation