ESLint提示对象属性转换时存在unsafe assignment of any值错误如何解决
报错原因
这个报错由@typescript-eslint/no-unsafe-assignment规则触发,核心原因是代码中大量使用any类型,TypeScript 无法校验赋值操作的类型安全性。同时你现有代码存在明显笔误:for...in循环遍历的变量value未定义,应该改为遍历foo。
解决思路
- 替换无意义的
any类型
优先用具体类型或者泛型定义函数和变量:- 给
transformIt加泛型,保持输入输出类型关联,避免返回值为any:
function transformIt<T>(value: T): T { // 原有逻辑 }- 声明
foo时用Record<string, unknown>代替any,既兼容任意键值对的对象结构,又不会丢失类型校验能力,同时判断对象时要排除null的情况(因为typeof null === 'object'是JS的历史遗留问题)。
- 给
- 补充类型收窄逻辑
如果transformIt会转换输入值的类型,可以在赋值前做类型判断,明确值的类型后再赋值,让TS识别到操作的安全性。 - 临时关闭校验(不推荐)
如果是老项目暂时无法调整类型,且你确定当前赋值逻辑是安全的,可以在报错行上方加注释// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment临时跳过该行校验,不要全局关闭规则。
修改后参考代码
// 泛型定义转换函数,保证输入输出类型一致 function transformIt<T>(value: T): T { // ...原有业务逻辑 } // 用Record定义foo的类型,替代any let foo: Record<string, unknown> = /* 原有赋值逻辑 */ if (typeof foo === 'object' && foo !== null) { // 修正遍历对象为foo,修复原代码的变量未定义问题 for (const property in foo) { foo[property] = transformIt(foo[property]) } }
内容的提问来源于stack exchange,提问作者Vitali
相关产品推荐
相关产品推荐

