Skip to content
← Back to rules

typescript/no-import-type-side-effects 制限

🛠️ An auto-fix is available for this rule.

何をするのか

インポートにインラインの型修飾子を持つセレクタのみが含まれる場合、トップレベルの import type 修飾子を使用することを強制します。

なぜこれは問題なのか

--verbatimModuleSyntax コンパイラオプションにより、TypeScript はインポート宣言に対してシンプルで予測可能なトランスパイルを行います。具体的には、トップレベルの型修飾子を持つインポート宣言を完全に削除し、インラインの型修飾子を持つすべてのインポートセレクタも削除します。

後者の動作は、特定の状況下で意図しない副作用を残す可能性がある点が注意が必要です。例えば:

ts
import { type A, type B } from "mod";

は以下のようにトランスパイルされます:

ts
import {} from "mod";
// これは次と同じです
import "mod";

まれなケースでは、副作用のためにインポートが必要な場合がありますが、ほとんどの場合、不要な副作用付きのインポートを残すのは望ましくありません。

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

ts
import { type A } from "mod";
import { type A as AA } from "mod";
import { type A, type B } from "mod";
import { type A as AA, type B as BB } from "mod";

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

ts
import type { A } from "mod";
import type { A as AA } from "mod";
import type { A, B } from "mod";
import type { A as AA, B as BB } from "mod";

使用方法

設定ファイルまたは CLI でこのルールを有効化するには、以下のいずれかを使用してください:

json
{
  "rules": {
    "typescript/no-import-type-side-effects": "error"
  }
}
bash
oxlint --deny typescript/no-import-type-side-effects

参考情報