TypeScript相当于JavaScript包括()

时间:2016-12-21 10:31:14

标签: javascript angular typescript

使用数组元素上的includes获取TypeScript错误。当然,一旦编译成js它工作正常但我仍然得到以下TypeScript错误:

  

属性'包含'在类型'boolean []'

上不存在

代码:

validAttrs() {
  let valid: boolean[] = this.required.map((value, index) => {
    if(this.elm.nativeElement.getAttribute(value) === null) {
      return false;
    };
    return true;
  });
  return valid.includes(false) ? false : true;
}

3 个答案:

答案 0 :(得分:3)

就修复编译错误而言,修复了编译问题,即在我es2016的{​​{1}}选项中添加了lib。这为数组添加了tsconfig.json的必要声明。

我尝试使用TypeScript 2.1.4 includesboolean[]替换为Array<boolean>。它没有任何区别。从逻辑上讲,它不应该有所作为,因为boolean[]Array<boolean> 是相同的事情

话虽如此,我同意suggested fix OP的代码应该实现为:

validAttrs() {
  return this.required.every(value => this.elm.nativeElement.getAttribute(value) !== null);
}

除了删除不必要的逻辑之外,这还有一个优点,即every一旦回调返回一个假值,就会停止检查数组。检查其余部分是没有意义的,因为一旦回调返回一个假值,返回值必然是false。另一方面,问题中的实现总是对数组的所有元素执行测试。如果第一个元素未通过测试,那么它将不必要地检查阵列的其余部分!!

答案 1 :(得分:2)

@ echonax的评论为我工作。

validAttrs() {
  let valid: Array<boolean> = this.required.map((value, index) => {
    if(this.elm.nativeElement.getAttribute(value) === null) {
      return false;
    };
    return true;
  });
  return valid.includes(false) ? false : true;
}

答案 2 :(得分:2)

您甚至不需要includes来完成您的工作。您的代码可以简单地

validAttrs() {
  return this.required.every(value => this.elm.nativeElement.getAttribute(value) !== null);
}

这也有一个好处,就是它会在找到第一个空值时停止检查。