typescript/use-unknown-in-catch-callback-variable 制限
何を実行するか
このルールでは、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