You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决catch语句中的@typescript-eslint/no-explicit-any错误及unknown类型问题?

解决@typescript-eslint/no-explicit-any与catch语句unknown类型的冲突问题

当你在catch语句里用any类型时,会触发@typescript-eslint/no-explicit-any的报错;换成unknown类型后,又没法直接访问e.message——这是因为TypeScript对unknown类型的限制很严格,必须先做类型收窄才能访问它的属性。

下面给几种实用的解决方法:

方法一:用instanceof检查是否为Error实例

这是最常用的安全方式,直接判断异常是否是标准Error对象:

try {
  // await code here
} catch (e: unknown) {
  if (e instanceof Error) {
    throw e.message;
  }
  // 处理非Error类型的异常,比如字符串、数字等
  throw String(e);
};

方法二:自定义类型守卫检查message属性

如果你的异常可能不是标准Error,但带有message属性,可以自定义类型守卫来识别:

function hasMessage(obj: unknown): obj is { message: string } {
  return typeof obj === 'object' && obj !== null && 'message' in obj && typeof (obj as { message: unknown }).message === 'string';
}

try {
  // await code here
} catch (e: unknown) {
  if (hasMessage(e)) {
    throw e.message;
  }
  // 兜底处理
  throw String(e);
};

方法三:类型断言(不推荐)

如果你能100%确定抛出的异常都是Error类型,可以用类型断言,但这种方式不安全,一旦出现非Error异常会导致运行时错误:

try {
  // await code here
} catch (e: unknown) {
  throw (e as Error).message;
};

优先选前两种方法,既能满足eslint规则,又能保证代码的类型安全。

内容的提问来源于stack exchange,提问作者Weijing Jay Lin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 09:42:40