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

TSLint提示forIn循环必须过滤 已加hasOwnProperty判断仍报错如何解决

问题原因

你遇到的报错是TSLint内置的forin规则触发的,该规则要求所有for in循环必须增加过滤逻辑,排除原型链上继承的可枚举属性。
你写的data.hasOwnProperty(key)写法没有通过校验,是因为TSLint的forin规则识别逻辑比较严格:对象自身的hasOwnProperty方法存在被重写的风险,所以规则默认不把该写法认定为合法的过滤条件,仅认可Object.prototype.hasOwnProperty.call的标准原型调用写法。

解决方案
  • 方案1:替换为规则认可的过滤写法
const data = result.data
for (const key in data) {
  if (Object.prototype.hasOwnProperty.call(data, key)) {
    // 业务代码
  }
}
  • 方案2:确认场景不需要过滤原型属性时,直接在tslint.json中关闭该规则
{
  "rules": {
    "forin": false
  }
}
  • 方案3:临时跳过单条语句的校验(不推荐全局使用)
const data = result.data
// tslint:disable-next-line: forin
for (const key in data) {
  if (data.hasOwnProperty(key)) {
    // 业务代码
  }
}
  • 方案4:更推荐的替代遍历方式,从根源上规避for in的规则校验问题,同时避免原型属性干扰
// 写法1:用Object.keys遍历
const data = result.data
Object.keys(data).forEach(key => {
  const value = data[key]
  // 业务代码
})

// 写法2:用Object.entries直接遍历键值对
for (const [key, value] of Object.entries(data)) {
  // 业务代码
}

内容的提问来源于stack exchange,提问作者Raphael

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:42:03