TypeScript数组比较函数报错:Property 'length' does not exist on type 'never' 解析
问题分析与修复
首先解释你遇到的错误:Property 'length' does not exist on type 'never'是TypeScript类型推断导致的——你的第一个条件判断写反了:
if (arr1 || arr2) { return false; }
这段代码的逻辑是只要arr1或arr2存在(非空/非undefined),就直接返回false,剩下的代码分支里,TypeScript会推断arr1和arr2只能是never类型(因为参数声明是number[],正常情况下不会走到这里,但你的逻辑强行把存在的情况都return了,剩下的只能是不可能存在的状态),自然就没有length属性,所以报错。
代码里的其他问题及修复
除了这个类型错误,你的函数逻辑还有多处问题,完整修复后的代码如下:
function areArraysEqual(arr1: number[], arr2: number[]): boolean { // 先判断是否有一个为undefined/null if (!arr1 || !arr2) { return arr1 === arr2; // 只有两个都不存在时才相等 } // 引用相同直接返回true if (arr1 === arr2) { return true; } // 长度不等直接返回false if (arr1.length !== arr2.length) { return false; } // 遍历索引比较每个元素 for (let i = 0; i < arr1.length; i++) { if (arr1[i] !== arr2[i]) { return false; } } return true; }
关键修复点说明
- 修正第一个条件判断:改为
!arr1 || !arr2,用来处理其中一个数组不存在的情况,此时只有两个都不存在才返回true - 循环改为按索引遍历:原代码
for (let i of arr1)拿到的是数组的元素值,不是索引,导致arr1[i]逻辑错误 - 元素比较时要对应索引:原代码
arr1[i] != arr2是把元素和整个数组比较,明显错误,改为arr1[i] !== arr2[i] - 使用严格相等
===/!==替代非严格相等,避免类型转换带来的意外问题
内容的提问来源于stack exchange,提问作者AndreasInfo
相关产品推荐
相关产品推荐

