【问题标题】:TypeScript equivalent of JavaScript includes()JavaScript 的 TypeScript 等价物包括()
【发布时间】:2016-12-21 19:33:54
【问题描述】:

在数组元素上使用包含获取 TypeScript 错误。当然,一旦编译为 js,它就可以正常工作,但我仍然收到以下 TypeScript 错误:

“boolean[]”类型上不存在属性“includes”

代码:

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;
}

【问题讨论】:

  • 尝试将boolean[] 更改为Array<boolean>
  • @echonax 这会有什么不同?它们的含义相同。
  • @torazaburo 我认为这是打字稿问题先生。也许他们还没有用那种类型实现它。这就是我说“尝试”的原因:P
  • 我不再收到错误,所以肯定会有所不同

标签: javascript angular typescript


【解决方案1】:

就修复编译错误而言,修复的编译问题是将es2016 添加到我的tsconfig.json 中的lib 选项。这会在数组上添加必要的 includes 声明。

我尝试在 TypeScript 2.1.4 中使用 suggested fixboolean[] 替换为 Array<boolean>。它没有任何区别。从逻辑上讲,这应该没什么区别,因为boolean[]Array<boolean> 是同一个东西


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

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

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

【讨论】:

    【解决方案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;
    }
    

    【讨论】:

    • 我很怀疑用Array&lt;boolean&gt; 替换boolean[] 会产生什么不同。它们在语义上是相同的。
    • 好的,所以我 100% 确定当我的代码读取 boolean[] 时它会出错,但是当我将其更改为 Array 时它没有出错并符合要求。
    • 在操场上,当我使用boolean[] 时,我收到您报告的错误,即“类型'boolean[]' 上不存在属性'includes'”。当我将其更改为Array&lt;boolean&gt; 时,我得到完全相同的错误,向 TS 证明它们是相同的。根据文档,Array 类型可以用两种方式之一编写。首先,您使用元素的类型,后跟[] 来表示该元素类型的数组。第二种方式使用通用数组类型,Array&lt;elemType&gt;.
    【解决方案3】:

    您甚至不需要 includes 来完成您正在尝试做的事情。您的代码可以简单地是

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

    这还有一个好处是它会在找到第一个空值的那一刻停止检查。

    【讨论】:

      猜你喜欢
      • 2013-08-25
      • 2011-07-03
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 2016-08-30
      • 2015-09-27
      • 2021-03-22
      • 2014-02-27
      相关资源
      最近更新 更多