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

ESLint提示对象属性转换时存在unsafe assignment of any值错误如何解决

报错原因

这个报错由@typescript-eslint/no-unsafe-assignment规则触发,核心原因是代码中大量使用any类型,TypeScript 无法校验赋值操作的类型安全性。同时你现有代码存在明显笔误:for...in循环遍历的变量value未定义,应该改为遍历foo。

解决思路

  • 替换无意义的any类型
    优先用具体类型或者泛型定义函数和变量:
    1. 给transformIt加泛型,保持输入输出类型关联,避免返回值为any:
    function transformIt<T>(value: T): T {
      // 原有逻辑
    }
    
    1. 声明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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:24:03