2016-10-04 106 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; 
     }); 
    }); 
相關問題