【问题标题】:TypeScript error: Type 'void' is not assignable to type 'boolean'TypeScript 错误:类型 'void' 不可分配给类型 'boolean'
【发布时间】:2016-06-24 02:12:14
【问题描述】:

我遇到了 TypeScript 错误:

'(element: Conversation) => void' 类型的参数不能分配给'(value: 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
  ) {}
}

这是我的代码

// 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);
  }
});

这个错误是什么意思?提前谢谢你。

【问题讨论】:

    标签: typescript


    【解决方案1】:

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

    • 价值:对话
    • 索引:编号
    • 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 中您的谓词为其返回true 的第一个项目是find 返回的值。

    【讨论】:

      【解决方案2】:

      您的代码将函数作为参数传递给find。该函数采用element 参数(Conversation 类型)并返回void(意味着没有返回值)。 TypeScript 将其描述为 (element: Conversation) => void'

      TypeScript 的意思是 find 函数不期望接收一个接受对话并返回 void 的函数。它需要一个接受ConversationsnumberConversation 数组的函数,并且该函数应该返回一个boolean

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

      【讨论】:

        猜你喜欢
        • 2021-10-12
        • 1970-01-01
        • 1970-01-01
        • 2017-06-29
        • 1970-01-01
        • 2020-07-22
        • 2021-08-19
        • 2020-07-29
        • 2019-06-07
        相关资源
        最近更新 更多