首页 > 解决方案 > 参数不可分配给参数 - 打字稿错误

问题描述

我正在构建的打字稿应用程序出现错误。我正在使用 Ionic/Angular,我遇到的错误之一是:

[20:12:30] 打字稿:C:/xampp/htdocs/project x/anonymous-social/src/pages/activity/activity.ts,行:59 类型“(数据:DataSnapshot)=> void”的参数是不可分配给“(a:DataSnapshot)=> boolean”类型的参数。类型 'void' 不能分配给类型 'boolean'。

L58:(快照)=> {

L59: 快照.forEach(数据 => {

L60: data.ref.update({'read': "true"})

我不太确定我为什么要说实话。也许有人可以解释..它引用的代码是:

if(checkStatus) {
  this.database.database.ref('/users/'+this.userData.uid+'/replied_to')
  .orderByChild('read')
  .equalTo("false").once("value",
  (snapshot) => {
    snapshot.forEach(data => {
        data.ref.update({'read': "true"})
    });
  });
}

这在语法上是正确的,不是吗?我究竟做错了什么?任何帮助都会很棒!谢谢

标签: javascriptangulartypescript

解决方案


你只需要从你的forEach回调函数中返回一个布尔值。在您的情况下,由于您不想取消迭代,请 return false。所以像:

snapshot.forEach(data => {
    data.ref.update({'read': "true"})
    return false // Add this
});

就像普通的 javascriptforEach方法一样,您可以从回调中返回一个真值来停止迭代。所以回调函数的类型实际上是:

(a: DataSnapshot) => boolean

您正在提供一个返回的函数void,这就是打字稿所抱怨的。虽然您的代码在运行时应该可以正常工作(因为undefined它是虚假的),但它与预期的类型不匹配,因此您会收到打字稿错误。

来自firebase文档forEach

函数(非空 firebase.database.DataSnapshot)

将为每个子 DataSnapshot 调用的函数。回调可以返回 true 以取消进一步的枚举。

强调我的。


推荐阅读