typescript - 如何安全地访问 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 4.0 引入了声明catch
子句变量类型的能力...只要您将其键入为unknown
:
TypeScript 4.0 现在允许您指定
catch
子句变量的类型unknown
。unknown
比它更安全,any
因为它提醒我们在对我们的值进行操作之前需要执行某种类型的检查。
我们没有能力给捕获的错误提供任意类型;我们仍然需要使用类型保护来检查运行时捕获的值:
try {
throw new Error('foo');
} catch (err: unknown) {
if (err instanceof Error) {
return {
message: `Things exploded (${err.message})`,
};
}
}
推荐阅读
- java - findElements(By) 方法不适用于参数 (MobileElement)
- sql - 您可以基于两个字段来约束 SQL 行吗?
- mysql - mysql 为多个条件选择计数
- vb.net - 在 VB.NET 中处理 MSHTML.Document 鼠标事件时 IE 冻结
- python - 尽管 API 密钥处于活动状态,Upwork API 授权 URL 仍返回“未授权”
- azure-cosmosdb - 并排运行 DocumentClient 和 CosmosClient
- python - 用于映射到 seaborn 中的 facet 网格的标签函数
- excel - 更改格式,输入单元格,按 Enter,Vlookup 已识别
- c++ - 对象和数组
- sql - 视图中可能有多个选择语句?或者应该是什么?