TypeScript报错TS2339:map/find迭代时属性不存在于never类型上
问题原因
你遇到的是TypeScript默认类型推断导致的never类型报错,核心问题出在对象数组初始化阶段:
- 你用
reduce方法创建数组时直接传入空数组[]作为初始值,TypeScript会默认将空数组推断为never[]类型,代表该数组不允许包含任何类型的值 - 后续你通过
push方法往数组里添加对象时,TypeScript不会自动更新数组的类型推断,数组类型依然保持为never[] - 遍历数组访问元素属性时,TypeScript认为
never类型不可能存在你要访问的属性,就会抛出对应的类型错误 - 你之前添加的数组长度判断无法解决问题,因为问题和数组是否为空无关,是数组的类型从一开始就推断错误
解决方法
- 先定义数组元素的类型接口,示例如下(按照你实际的元素属性调整即可):
interface CleanDataItem { id: string; name: string; // 补充其他你需要的属性 }
- 给
reduce的初始空数组显式声明类型,不要直接使用未标注类型的空数组:
// 将你原来reduce的初始值 [] 替换为下面的写法,类型对应你定义好的元素接口 const targetArray = yourReduceLogic([] as CleanDataItem[])
- 可选优化:后续遍历访问属性时可以加上可选链操作符
?.,避免运行时可能出现的属性不存在问题
内容的提问来源于stack exchange,提问作者thepaperescape
相关产品推荐
相关产品推荐

