[英]TypeScript - Property 'length' does not exist on type 'never'
我正在写一个助手 function 来比较 TypeScript 中的两个 arrays。
function areArraysEqual(arr1: number[], arr2: number[]): boolean {
if (arr1 || arr2) {
return false;
}
if (arr1 == arr2) {
return true;
}
if (arr1.length != arr2.length) {
return false;
}
for (let i of arr1) {
if (arr1[i] != arr2) {
return false;
}
}
return true;
}
错误Property 'length' does not exist on type 'never'.
意思是,我得到的是arr1.length
和arr1.length
?
如果您已将strictNullChecks
中的 strictNullChecks 设置为true
(似乎是这种情况),则不能将null
或undefined
传递给areArraysEqual
。 function 正文中不需要前两个条件。 您可以像这样简化 function:
function areArraysEqual(arr1: number[], arr2: number[]): boolean {
if (arr1.length != arr2.length) {
return false;
}
for (let i of arr1) {
if (arr1[i] != arr2[i]) {
return false;
}
}
return true;
}
关于误导性错误 - 这是因为条件if (arr1 || arr2)
始终为true
,所以 function 主体的 rest 没有任何功能。 因此 typescript 将缩小arr1
和arr2
的类型。 Typescript 将number[]
从它们的类型集中移除,因此它们变为空集,即never
。 该类型never
没有“长度”属性。
另外正如评论中提到的@Bbrk24,如果你认为你想要传递的 arrays 的大小很大,那么如果你在 function 主体的开头检查这个条件,function 可以有更好的性能。
if (arr1 == arr2) {
return true;
}
因为当它们是相同的引用时,就不需要通过一个大for
循环 go。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.