【问题标题】:Optional Chaining using indexOf?使用 indexOf 的可选链接?
【发布时间】:2020-07-19 09:33:17
【问题描述】:

我想简化这段代码:

function exists(haystack?: string[]): boolean {
  if (haystack) {
    return haystack.indexOf("needle") > -1
  }

  return false
}

...我想我可以使用可选链接来做到这一点。 但是,它不起作用,看起来我误解了一些东西......

function exists(haystack?: string[]): boolean {
  return haystack?.indexOf("needle") > -1 // ERROR: Object is possibly 'undefined'. (2532)
}

【问题讨论】:

  • 如果haystackundefined,则您的表达式是有效地 undefined > -1
  • return haystack?.indexOf("needle") && haystack.indexOf("needle") > -1

标签: typescript


【解决方案1】:

你可以给haystack提供一个空数组一样的默认值,这样如果在调用这个函数时没有提供值,我们可以使用空数组来防止undefined对象错误:

function exists(haystack: string[] = []): boolean {
  return haystack.indexOf("needle") > -1;
}

您可以通过将.indexOf() 替换为includes() 来进一步改进您的代码;

function exists(haystack: string[] = []): boolean {
  return haystack.includes("needle");
}

【讨论】:

  • 嗯,没有默认值,我可以用这个吗? return !!haystack?.includes("needle");
  • @kraftwer1 它应该可以工作。有关可能的错误及其修复,请参阅此帖子。 stackoverflow.com/questions/40545329/…
猜你喜欢
  • 2023-04-03
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多