参数类型的“(SNAP:DataSnapshot)=>无效”是不能分配给类型的参数“(A:DataSnapshot)=>布尔”
问题描述:
我已经了解这个问题的几个问题和答案,但没能解决它。参数类型的“(SNAP:DataSnapshot)=>无效”是不能分配给类型的参数“(A:DataSnapshot)=>布尔”
我使用的是Ionic2,我有一种从Firebase数据库v3中检索数据的方法。 我不明白为什么控制台我得到以下错误,当我做ionic serve
:
Error TS2345: Argument of type '(snap: DataSnapshot) => void' is not assignable to parameter of type '(a: DataSnapshot) => boolean'.
Type 'void' is not assignable to type 'boolean'.
这是方法:
constructor(private http: Http) {
firebase.database().ref('users').orderByChild("id").on("value", function(snapshot){
let items = [];
snapshot.forEach(snap => {
items.push({
uid: snap.val().uid,
username: snap.val().username,
});
});
});
}
}
答
在DataSnapshot
的forEach
方法有此签名:
forEach(action: (a: firebase.database.DataSnapshot) => boolean): boolean;
作为action
可以返回到true
短路列举,并提前返回。如果返回一个虚假值,则枚举继续正常进行。 (这是在documentation提到)
为了安抚打字稿编译器,最简单的解决办法是回到false
(继续枚举子快照):
database()
.ref("users")
.orderByChild("id")
.on("value", (snapshot) => {
let items = [];
snapshot.forEach((snap) => {
items.push({
uid: snap.val().uid,
username: snap.val().username
});
return false;
});
});