打字稿-类型“字符串”不可分配给类型“布尔”

时间:2019-10-09 22:19:46

标签: javascript angular typescript

我有以下打字稿代码:

const parentItem= this.links.find((link) => {
  return urlArr.find((urlWord) => {
    return !!(urlWord === link.route.split('./')[1])
  })
});

// link.route.split('./')[1] is a string
// urlWord is also a string
// urlArr is array of strings
// links is an array of objects

和打字稿不断抱怨:

  

.component.ts(11,59):错误TS2322:类型'string'无法分配给类型'boolean'。

该代码在chrome控制台中可以正常工作。

这看起来类似于question,但是即使阅读了之后,我仍然无法弄清问题出在哪里。

2 个答案:

答案 0 :(得分:2)

只需更新您的打字稿和/或打字。您的代码中有no any error

declare var links: { route: string }[]
declare var urlArr: string[]

const parentItem = links.find(link => urlArr.find(urlWord => urlWord === link.route.split('./')[1]));

与当前版本的打字稿一样,将find方法定义为

(method) Array<string>.find(predicate: (value: string, index: number, obj: string[]) => unknown, thisArg?: any): string | undefined (+1 overload)

注意用unknown代替boolean-您可以返回任何想要的内容。

但是由于实际上不需要内部find的结果(除非可以找到空字符串),因此可以使用some代替它。

答案 1 :(得分:1)

如注释中所述,我需要在find函数中返回一个布尔值。因此,执行以下操作可确保将内部查找的结果转换为布尔值。

const parentItem= this.links.find((link) => {
  // convert to boolean
  return !!(urlArr.find((urlWord) => {
    return urlWord === link.route.split('./')[1]
  }));
});

上面的代码现在返回匹配的链接对象或未定义。