javascript - 参数不可分配给参数 - 打字稿错误
问题描述
我正在构建的打字稿应用程序出现错误。我正在使用 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"})
});
});
}
这在语法上是正确的,不是吗?我究竟做错了什么?任何帮助都会很棒!谢谢
解决方案
你只需要从你的forEach
回调函数中返回一个布尔值。在您的情况下,由于您不想取消迭代,请 return false
。所以像:
snapshot.forEach(data => {
data.ref.update({'read': "true"})
return false // Add this
});
就像普通的 javascriptforEach
方法一样,您可以从回调中返回一个真值来停止迭代。所以回调函数的类型实际上是:
(a: DataSnapshot) => boolean
您正在提供一个返回的函数void
,这就是打字稿所抱怨的。虽然您的代码在运行时应该可以正常工作(因为undefined
它是虚假的),但它与预期的类型不匹配,因此您会收到打字稿错误。
函数(非空 firebase.database.DataSnapshot)
将为每个子 DataSnapshot 调用的函数。回调可以返回 true 以取消进一步的枚举。
强调我的。
推荐阅读
- python - 是否可以编辑 Folium Geocoder 插件默认 CSS
- android - Android 应用可以检查另一个应用的代码透明度签名吗?
- angular - AngularFire登录时缺少或权限不足,刷新后工作
- unity3d - unity后处理层不出现
- typescript - Vue2/3 - 在组件之间共享功能。该函数有一个业务逻辑,如调用 API、突变
- javascript - 我需要 xpath 的解决方案
- python - 在字典中查找具有最多唯一值的键
- r - 如何让这个函数的输出打印到 R 中的不同行上?
- java - 尝试从我的 Java 服务器获取数据时,为什么我的 React 应用程序中的 fetch() 不起作用?
- javascript - SPFX Web 部件添加文本并在单击按钮时在弹出窗口中显示它