Skip to content
← Back to rules

eslint/no-unsafe-negation 正しさ

This rule is turned on by default.
An auto-fix is available for this rule.

何をするか

関係演算子の左側オペランドを否定することを禁止し、演算子の優先順位の誤解や誤った否定の使用による論理エラーを防止します。

このルールは、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

参照