2016-10-04 80 views
5

我已经了解这个问题的几个问题和答案,但没能解决它。参数类型的“(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, 
         }); 
        }); 
       }); 
      } 
} 

回答

11

DataSnapshotforEach方法有此签名:

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; 
     }); 
    }); 
相关问题