我在构建我的打字稿应用程序时遇到错误。我使用Ionic / Angular,其中一个错误是:
[20:12:30] typescript:C:/ xampp / htdocs / project x / anonymous-social / src / pages / activity / activity.ts,line:59 类型'(数据:DataSnapshot)=>的参数空隙'不能分配给'(a:DataSnapshot)=>类型的参数。 布尔&#39 ;.键入' void'不能分配给'布尔'。
L58 :(快照)=> {
L59:snapshot.forEach(data => {
L60:data.ref.update({'读':" 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"})
});
});
}
这在语法上是否正确不是吗?我究竟做错了什么?任何帮助都会很棒!谢谢
答案 0 :(得分:2)
您只需要从function noStartingWhiteSpace(e){
var preventWhiteSpaceInput= e.target.value;
if(/^\s/.test(preventWhiteSpaceInput))
e.target.value = '';
}
回调函数返回一个布尔值。在您的情况下,由于您不想取消迭代,请返回forEach
。如下所示:
false
与普通的javascript snapshot.forEach(data => {
data.ref.update({'read': "true"})
return false // Add this
});
方法非常相似,您可以从回调中返回一个truthy值来停止迭代。所以回调函数的类型实际上是:
forEach
您正在提供一个返回(a: DataSnapshot) => boolean
的函数,这就是打字稿所抱怨的内容。虽然你的代码在运行时应该可以正常工作(因为void
是假的),但它并不匹配预期的类型,因此你会得到一个打字稿错误。
来自{{3}}:
function(非null firebase.database.DataSnapshot)
将为每个子DataSnapshot调用的函数。 的 callback可以返回true以取消进一步的枚举。
强调我的。