Skip to content
← Back to rules

eslint/no-multi-assign スタイル

何をするか

連鎖的な代入式の使用を禁止します。

なぜ問題か

変数の連鎖的な代入は予期しない結果を引き起こす可能性があり、読みづらいです。

js
(function () {
  const foo = (bar = 0); // `foo = bar == 0` を意図していたのですか?
  bar = 1; // `bar` が定数ではないため、この行は失敗しません。
})();
console.log(bar); // `bar` はスコープ外なので、出力は 1 になります。

このルールに違反する誤ったコードの例:

js
var a = (b = c = 5);

const foo = (bar = "baz");

let d = (e = f);

class Foo {
  a = (b = 10);
}

a = b = "quux";

このルールに準拠する正しいコードの例:

js
var a = 5;
var b = 5;
var c = 5;

const foo = "baz";
const bar = "baz";

let d = c;
let e = c;

class Foo {
  a = 10;
  b = 10;
}

a = "quux";
b = "quux";

設定

このルールは以下のプロパティを持つ設定オブジェクトを受け入れます。

ignoreNonDeclaration

型: boolean

デフォルト: false

true に設定すると、宣言での変数初期化やクラスフィールドの初期化を含まない連鎖代入を許可します。

このオプションを true に設定した場合の正しいコードの例:

js
let a;
let b;
a = b = "baz";

const x = {};
const y = {};
x.one = y.one = 1;

このオプションを true に設定した場合の誤ったコードの例:

js
let a = (b = "baz");

const foo = (bar = 1);

class Foo {
  a = (b = 10);
}

使い方

このルールを設定ファイルまたは CLI で有効化するには、次のようにします:

json
{
  "rules": {
    "no-multi-assign": "error"
  }
}
bash
oxlint --deny no-multi-assign

参考