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
相关产品推荐
相关产品推荐

