Skip to content
← Back to rules

typescript/use-unknown-in-catch-callback-variable 制限

💭 This rule requires type information.
An auto-fix is available for this rule.

何を実行するか

このルールでは、catch 範囲の変数に any の代わりに unknown を使用することを強制します。

なぜ問題なのか

TypeScript 4.0 以降では、catch 範囲の変数を any の代わりに unknown と型指定できるようになりました。unknown を使うことで、エラーを使用する前に型チェックを行う必要が生じるため、潜在的なランタイムエラーを防ぐことができます。

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

ts
try {
  somethingRisky();
} catch (error: any) {
  // 'unknown' を使うべき
  console.log(error.message); // 安全ではないアクセス
  error.someMethod(); // 安全ではない呼び出し
}

// 古い TypeScript ではデフォルトの `catch` 変数は 'any' になる
try {
  somethingRisky();
} catch (error) {
  // 暗黙的に 'any'
  console.log(error.message); // 安全ではないアクセス
}

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

ts
try {
  somethingRisky();
} catch (error: unknown) {
  // Error オブジェクト用の型ガード
  if (error instanceof Error) {
    console.log(error.message); // 安全なアクセス
    console.log(error.stack);
  } else {
    console.log("不明なエラー:", error);
  }
}

// より包括的なエラー処理
try {
  somethingRisky();
} catch (error: unknown) {
  if (error instanceof Error) {
    // Error オブジェクトを処理
    console.error("エラー:", error.message);
  } else if (typeof error === "string") {
    // 文字列形式のエラーを処理
    console.error("文字列エラー:", error);
  } else {
    // 認知できないエラー型を処理
    console.error("未知のエラータイプ:", error);
  }
}

// エラー処理用のヘルパー関数
function isError(error: unknown): error is Error {
  return error instanceof Error;
}

try {
  somethingRisky();
} catch (error: unknown) {
  if (isError(error)) {
    console.log(error.message);
  }
}

使い方

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

json
{
  "rules": {
    "typescript/use-unknown-in-catch-callback-variable": "error"
  }
}
bash
oxlint --type-aware --deny typescript/use-unknown-in-catch-callback-variable

参照