我有以下打字稿代码:
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,但是即使阅读了之后,我仍然无法弄清问题出在哪里。
答案 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]
}));
});
上面的代码现在返回匹配的链接对象或未定义。