我遇到TypeScript错误:
类型的参数'(元素:对话)=>空隙'不能分配给类型'的参数(值:对话,索引:数字,对象:对话[])=>布尔&#39 ;.键入' void'不能分配给'布尔'。
这是我的架构
export class Conversation {
constructor(
public id: number,
public dateTime: Date,
public image: string,
public isUnread: boolean,
public title: string
) {}
}
这是我的代码
// Mark as read also in data store
this.dataStore.data.find((element) => {
if (element.id === conversationId) {
element.isUnread = true;
// Push the updated list of conversations into the observable stream
this.observer.next(this.dataStore.data);
}
});
这个错误意味着什么?提前谢谢你。
答案 0 :(得分:15)
这意味着您传递给this.dataStore.data.find
的回调函数应该返回一个布尔值并且有3个参数,其中两个可以是可选的:
但是,您的回调函数不会返回任何内容(返回void)。您应该使用正确的返回值传递回调函数:
this.dataStore.data.find((element, index, obj) => {
// ...
return true; // or false
});
或:
this.dataStore.data.find(element => {
// ...
return true; // or false
});
这就是为什么这样:传递给find
方法的函数称为谓词。这里的谓词根据函数本身定义的条件定义布尔结果,因此find
方法可以确定找到的值。
实际上,这意味着为data
中的每个项调用谓词,而谓词返回data
的{{1}}中的第一个项是{{返回的值} 1}}。
答案 1 :(得分:4)
您的代码将函数作为参数传递给find
。该函数采用element
参数(类型为Conversation
)并返回void
(表示没有返回值)。 TypeScript将其描述为(element: Conversation) => void'
TypeScript所说的是find
函数并不期望接收一个采用Conversation并返回void的函数。它需要一个带Conversations
,number
和Conversation
数组的函数,并且此函数应返回boolean
。
所以底线是您需要更改代码才能正确地将值传递给find
,否则您需要在定义文件中为find
的定义提供重载,接受Conversation
并返回void
。