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 子句变量中使用 unknown 而非 any

为什么这是不好的?

从 TypeScript 4.0+ 开始,catch 子句变量可以被类型标注为 unknown 而不是 any。使用 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

参考资料