繁体   English   中英

TypeScript - 类型“never”上不存在属性“length”

[英]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.lengtharr1.length

如果您已将strictNullChecks中的 strictNullChecks 设置为true (似乎是这种情况),则不能将nullundefined传递给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 将缩小arr1arr2的类型。 Typescript 将number[]从它们的类型集中移除,因此它们变为空集,即never 该类型never没有“长度”属性。

另外正如评论中提到的@Bbrk24,如果你认为你想要传递的 arrays 的大小很大,那么如果你在 function 主体的开头检查这个条件,function 可以有更好的性能。

if (arr1 == arr2) {
    return true;
}

因为当它们是相同的引用时,就不需要通过一个大for循环 go。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM