Typescript - 类型“string”不可分配给类型“boolean”

新手上路,请多包涵

我有以下打字稿代码:

 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 控制台中运行良好。

这可能看起来类似于这个 问题,但即使在阅读之后我也无法弄清楚问题出在哪里。

原文由 Syed Ali 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

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

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

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

原文由 Syed Ali 发布,翻译遵循 CC BY-SA 4.0 许可协议

只需更新您的打字稿和/或打字。您的代码中 没有任何错误

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 代替它。

原文由 Qwertiy 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题