typescript/use-unknown-in-catch-callback-variable 限制
它的作用
此规则强制在 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