import/namespace 正しさ
何を実行するか
完全な名前空間としてインポートされた場合(例:import * as foo from './foo'; foo.bar();)、参照される時点でその名前が存在していることを強制します(例:./foo が bar をエクスポートしていない場合、foo.bar() に対して警告を出力します)。エクスポートされている名前が見つからない場合、インポート宣言の時点で報告されます。また、計算された参照(例:foo["bar"]())に対しても報告します。インポートされた名前空間のメンバーへの代入についても報告します。
なぜ悪いのか
存在しない名前を参照すると、ランタイムエラーやコード内の予期しない動作を引き起こす可能性があります。これにより、コードの信頼性が低下し、メンテナンスが難しくなります。どの名前が有効であるかが明確でなくなるためです。このルールにより、すべての参照される名前が定義されていることが保証され、コードの明確さと堅牢性が向上します。
例
次のような状況を想定します。
javascript
// ./foo.js
export const bar = "I'm bar";このルールに対する誤りの例:
javascript
// ./qux.js
import * as foo from "./foo";
foo.notExported(); // エラー: notExported はエクスポートされていません
// インポートされた名前空間のメンバーへの代入
foo.bar = "new value"; // エラー: bar は再代入できません
// 存在しないエクスポートに対する計算された参照
const method = "notExported";
foo[method](); // エラー: notExported は存在しませんこのルールに対する正しい例:
javascript
// ./baz.js
import * as foo from "./foo";
console.log(foo.bar); // 正しい: bar はエクスポートされています
// 計算された参照
const method = "bar";
foo[method](); // 正しい: method はエクスポートされた関数を指しています設定
このルールは以下のプロパティを持つ設定オブジェクトを受け入れます:
allowComputed
type: boolean
default: false
インポートされた名前空間に対する計算された参照を許可するかどうか。
使用方法
設定ファイルまたは CLI でこのルールを有効化するには、次のように使用できます:
json
{
"plugins": ["import"],
"rules": {
"import/namespace": "error"
}
}bash
oxlint --deny import/namespace --import-plugin