首页 > 解决方案 > 如何安全地访问 TypeScript 中捕获的错误属性?

问题描述

情况

我正在使用 TypeScript,并且有一个 try / catch 块。捕获的错误被键入 ( Error)。我想使用错误的message属性。

我正在使用@typescript-eslint/no-unsafe-assignment启用规则的 eslint。

编码

try {
  throw new Error('foo');
} catch (err: Error) {
  const { message }: { message: string } = err;
  return {
    message: `Things exploded (${message})`,
  };
}

问题

当我运行我的 linter 时,我收到以下信息:

  4:9  error  Unsafe assignment of an any value  @typescript-eslint/no-unsafe-assignment

这让我很困惑,因为输入了错误 ( Error)。

问题

如何在 TypeScript 中捕获错误并访问错误的属性?

标签: typescript

解决方案


TypeScript 4.0 引入了声明catch子句变量类型的能力...只要您将其键入为unknown

TypeScript 4.0 现在允许您指定catch子句变量的类型unknownunknown比它更安全,any因为它提醒我们在对我们的值进行操作之前需要执行某种类型的检查。

我们没有能力给捕获的错误提供任意类型;我们仍然需要使用类型保护来检查运行时捕获的值:

try {
  throw new Error('foo');
} catch (err: unknown) {
  if (err instanceof Error) {
    return {
      message: `Things exploded (${err.message})`,
    };
  }
}

推荐阅读