代码之家  ›  专栏  ›  技术社区  ›  Simon

参数不可分配给参数-typescript错误

  •  0
  • Simon  · 技术社区  · 7 年前

    我正在构建的typescript应用程序出错。我用的是离子型/角度型,我得到的一个错误是:

    [20:12:30]typescript:c:/xampp/htdocs/project x/anonymous social/src/pages/activity/activity.ts,第59行 “(data:datasnapshot)=>void”类型的参数不可分配给“(a:datasnapshot)=> 布尔值。类型“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"})
        });
      });
    }
    

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   CRice    7 年前

    你只需要从 forEach 回调函数。在您的情况下,由于您不想取消迭代,请返回 false . 比如说:

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

    很像普通的javascript 前额 方法,可以从回调返回truthy值以停止迭代。所以回调函数的类型实际上是:

    (a: DataSnapshot) => boolean
    

    你给了一个函数,它返回 void 相反,这正是typescript所抱怨的。而您的代码在运行时应该工作得很好(因为 undefined 是falsy),它与预期的类型不匹配,因此出现typescript错误。

    firebase documentation on forEach :

    函数(非空的firebase.database.datasnapshot)

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

    强调我的。