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

Javascript 参数不可分配给参数-typescript错误,javascript,angular,typescript,Javascript,Angular,Typescript,我正在构建的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:s

我正在构建的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:snapshot.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"})
    });
  });
}

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

你只需要从你的
forEach
回调函数返回一个布尔值。在你的情况下,因为你不想取消迭代,所以返回
false
。比如:

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

与普通javascript
forEach
方法非常相似,您可以从回调中返回truthy值以停止迭代。因此回调函数的类型实际上是:

(a: DataSnapshot) => boolean
你给出的函数返回的是
void
,这正是typescript所抱怨的。虽然你的代码在运行时应该运行得很好(因为
undefined
是错误的),但它与预期的类型不匹配,所以你会得到一个typescript错误

从:

函数(非空firebase.database.DataSnapshot)

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


强调我的。

您只需要从
forEach
回调函数返回一个布尔值。在您的情况下,因为您不想取消迭代,所以返回
false
。例如:

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

与普通javascript
forEach
方法非常相似,您可以从回调中返回truthy值以停止迭代。因此回调函数的类型实际上是:

(a: DataSnapshot) => boolean
你给出的函数返回的是
void
,这正是typescript所抱怨的。虽然你的代码在运行时应该运行得很好(因为
undefined
是错误的),但它与预期的类型不匹配,所以你会得到一个typescript错误

从:

函数(非空firebase.database.DataSnapshot)

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


强调我的。

嘿,简,你也能分享实际的firebase数据文档吗?嘿,简,你也能分享实际的firebase数据文档吗?