【问题标题】:Argument is not assignable to parameter - typescript error参数不可分配给参数 - 打字稿错误
【发布时间】:2018-11-17 23:49:07
【问题描述】:

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

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

L58:(快照)=> {

L59:snapshot.forEach(data => {

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

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

【问题讨论】:

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

标签: javascript angular typescript


【解决方案1】:

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

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

很像普通的 javascript forEach 方法,您可以从回调中返回一个真值来停止迭代。所以回调函数的类型其实是:

(a: DataSnapshot) => boolean

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

来自firebase documentation on forEach

函数(非空 firebase.database.DataSnapshot)

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

强调我的。

【讨论】:

    猜你喜欢
    • 2018-06-13
    • 2017-04-23
    • 2018-06-19
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 2019-11-21
    • 2018-02-21
    相关资源
    最近更新 更多