如何在TypeScript中为异常指定类型以兼容TS编译器与ESLint
解决方案
以下几种方法可以同时满足TypeScript编译器和ESLint的要求:
方法一:使用unknown类型并进行类型收窄
TypeScript中catch语句的error默认类型是unknown,显式声明为unknown后,通过类型检查收窄类型再访问属性,既符合TS的类型安全要求,又避免了any触发ESLint规则:
try { console.log("test"); } catch (error: unknown) { // 先判断error是对象且存在message属性 if (typeof error === 'object' && error !== null && 'message' in error) { console.log(error.message); } else { // 处理非Error类型的错误,比如字符串、数字等 console.log(String(error)); } }
方法二:自定义类型守卫函数
如果你的业务场景中主要处理Error实例,可以定义一个类型守卫函数来复用类型判断逻辑:
// 类型守卫:判断输入是否为Error类型 function isError(error: unknown): error is Error { return typeof error === 'object' && error !== null && 'message' in error; } try { console.log("test"); } catch (error: unknown) { if (isError(error)) { console.log(error.message); } else { console.log('未知错误:', error); } }
方法三:类型断言为Error(谨慎使用)
如果能确定抛出的错误一定是Error实例,可以使用类型断言,但这种方式存在运行时风险(若抛出非Error类型会导致报错),仅在明确场景下使用:
try { console.log("test"); } catch (error: unknown) { console.log((error as Error).message); }
内容的提问来源于stack exchange,提问作者StaticMethod
相关产品推荐
相关产品推荐

