TS2345报错:unknown类型参数不能分配给string类型参数如何解决?
报错原因
TypeScript 4.0及以上版本开启严格类型校验后,catch语句捕获的error默认类型为unknown,而Error构造函数的入参要求为string类型,直接传入unknown类型的值会触发TS2345类型不匹配报错。你之前代码可正常运行,大概率是此前项目的TS版本较低,或未开启useUnknownInCatchVariables严格校验配置。
修复方案
推荐按照TS类型规范做类型收窄处理,也是最安全的修改方式,仅需调整catch块逻辑即可:
catch (error) { // 先判断是否为Error实例,取错误信息 if (error instanceof Error) { throw new Error(error.message) } // 兜底将其他类型的错误转为字符串传入 throw new Error(String(error)) }
如果仅需要临时快速绕开校验(不推荐长期使用,容易隐藏类型问题),可以使用类型断言:
catch (error) { throw new Error(error as string) }
如果想要全局恢复catch变量为any类型(极不推荐,会降低全局类型安全性),可在项目的tsconfig.json中添加配置:
{ "compilerOptions": { "useUnknownInCatchVariables": false } }
内容的提问来源于stack exchange,提问作者DanielSon
相关产品推荐
相关产品推荐

