Skip to content
← Back to rules

eslint/no-import-assign 正しさ

This rule is turned on by default.

何を行うか

インポートされたバインディングへの代入を禁止します。

なぜ悪いのか

エクスポートモジュール(ES Modules)によってインポートされたバインディングの更新は、実行時エラーを引き起こします。

一般的に、TypeScript コンパイラはこのチェックを既に強制しています。ただし、Object.assign経由での代入など、一部のケースではTypeScriptが検出できない場合があることに注意が必要です。そのため、これらのケースにおいても、このルールはTypeScriptコードに対して依然として有用です。

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

javascript
import mod, { named } from "./mod.mjs";
import * as mod_ns from "./mod.mjs";

mod = 1; // エラー: 'mod' は読み取り専用です。
named = 2; // エラー: 'named' は読み取り専用です。
mod_ns.named = 3; // エラー: 'mod_ns' のメンバーは読み取り専用です。
mod_ns = {}; // エラー: 'mod_ns' は読み取り専用です。
// 'mod_ns' を拡張できません
Object.assign(mod_ns, { foo: "foo" }); // エラー: 'mod_ns' のメンバーは読み取り専用です。

使用方法

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

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

参照