【发布时间】:2020-02-07 07:34:16
【问题描述】:
我有以下打字稿代码:
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:类型“字符串”不可分配给类型“布尔”。
代码在 chrome 控制台中运行良好。
这可能看起来与question 相似,但即使在阅读之后我也无法弄清楚问题出在哪里。
【问题讨论】:
-
尝试 .any 而不是 .find
-
您好,我扩展了您的代码(功能相同),使其更易于阅读。希望没事
-
您应该确保
parentItem接收到一个字符串:const parentItem: string = ...。在整个代码中实际添加预期类型可能是值得的,因为您将获得更接近实际问题的更有用的错误。很难说这里发生了什么,因为我们都不知道系统中已经布置了哪些实际类型。打字稿是关于做更少的假设。你要求我们在这里做一堆假设。 -
@JLF,似乎在他对
find的定义中,predicate应该返回boolean而不是unknown。 -
@Qwertiy 就是这样。
Array.prototype.find()对于字符串数组返回一个字符串(或未定义)。find谓词必须返回一个布尔值,因此使用嵌套的urlArr.find()作为links.find谓词的返回值是无效的
标签: javascript angular typescript