TypeScript错误:键入' void'不能分配给' boolean'

时间:2016-03-09 15:39:37

标签: typescript

我遇到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);
  }
});

这个错误意味着什么?提前谢谢你。

2 个答案:

答案 0 :(得分:15)

这意味着您传递给this.dataStore.data.find的回调函数应该返回一个布尔值并且有3个参数,其中两个可以是可选的:

  • value:Conversations
  • index:number
  • obj:会话[]

但是,您的回调函数不会返回任何内容(返回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的函数。它需要一个带ConversationsnumberConversation数组的函数,并且此函数应返回boolean

所以底线是您需要更改代码才能正确地将值传递给find,否则您需要在定义文件中为find的定义提供重载,接受Conversation并返回void