2016-10-04 7 views
5

私はすでにこの問題についていくつかの質問と回答を読みましたが、それを解決する。'(snap:DataSnapshot)=> void型の引数が'(a:DataSnapshot)=>ブール型 'のパラメータに割り当てられない

私はIonic2を使用しており、Firebase Database 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'. 

これはメソッドです:DataSnapshot

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

forEach方法は、このシグネチャがあります。

forEach(action: (a: firebase.database.DataSnapshot) => boolean): boolean; 

actionと返すと、enumeratを短絡するために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; 
     }); 
    }); 
関連する問題