TypeScript错误:类型'void'不能分配给'boolean'类型

be-*_*ied 17 typescript

我有一个TypeScript错误:

类型'(element:Conversation)=> void'的参数不能分配给类型'的参数(值:Conversations,index:number,obj:Conversation [])=> boolean'.类型'void'不能分配给'boolean'类型.

这是我的架构

export class Conversation {
  constructor(
    public id: number,
    public dateTime: Date,
    public image: string,
    public isUnread: boolean,
    public title: string
  ) {}
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码

// 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);
  }
});
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*isz 20

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

  • 价值:对话
  • 索引号
  • obj:会话[]

但是,您的回调函数不会返回任何内容(返回void).您应该使用正确的返回值传递回调函数:

this.dataStore.data.find((element, index, obj) => {
    // ...

    return true; // or false
});
Run Code Online (Sandbox Code Playgroud)

要么:

this.dataStore.data.find(element => {
    // ...

    return true; // or false
});
Run Code Online (Sandbox Code Playgroud)

理由是这样的:传递给find方法的函数称为谓词.这里的谓词根据函数本身定义的条件定义布尔结果,以便该find方法可以确定要查找的值.

实际上,这意味着为每个项目调用谓词data,并且data谓词返回的第一个项目是返回true的值find.


NYC*_*Net 5

您的代码正在将函数作为参数传递给find。该函数接受一个element参数(类型Conversation)并返回void(表示没有返回值)。TypeScript将其描述为(element: Conversation) => void'

TypeScript的意思是该find函数不希望接收接受对话并返回void的函数。它期望一个函数接受a Conversations,a number和一个Conversation数组,并且该函数应返回a boolean

因此,最重要的是您要么需要更改代码以find正确地传递值,要么需要find在接受a Conversation并返回的定义文件中为定义提供重载void