【问题标题】:Return an array of different types in TypeScript在 TypeScript 中返回一个不同类型的数组
【发布时间】:2017-11-11 19:19:08
【问题描述】:

在 TypeScript 2.5.3 中,我有一堆 selenium WebElements,它们是链接。我需要在字符串数组中获取他们的目标。来自 C# 我会使用带有 .Select() 的 Linq,它本身会从选择器返回一个返回类型列表。在 Typescript 中,这似乎不太好用:

    let categoryLinkElements = await this.driver.findElements(By.css('ul li a'));
    let categoryLinks = categoryLinkElements.filter(async linkElement => await linkElement.getAttribute('href'));

categoryLinkElementsWebElement 的数组。 linkElement.getAttribute('href') 返回 Promise<string>。因为使用了await,我希望categoryLinks 是一个字符串数组,就像C# 中List.Select() 的相同行为。相反,categoryLinksWebElement[]

为什么?以及如何才能得到正确的返回值?

【问题讨论】:

  • 您正在使用过滤器.. 如果 href 是您想要的,您应该使用 map。现在您只是过滤掉具有 href falsy 的元素。

标签: arrays linq typescript asynchronous array-filter


【解决方案1】:

Array.filter 在这里似乎是错误的,它应该用于返回与输入数组相同的值,但带有一些过滤条件。相反,Array.map 是 C# 中 List.Select 的正确等价物。

以下按预期工作:

let categoryLinks = categoryLinkElements.map(async linkElement => await linkElement.getAttribute('href'));

作为一个 Typescript 和 Javascript 的初学者,后来这似乎是一个愚蠢的问题......对不起:/

【讨论】:

  • 注意categoryLinks 将是Promise<string> 的数组,而不是string 的数组;
  • @JKillian 是正确的,你应该添加一个调用来减少
猜你喜欢
  • 1970-01-01
  • 2012-11-24
  • 2020-09-12
  • 2019-12-23
  • 2019-03-12
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多