如何将快照值转换为[String: AnyObject]
类型的字典值
我正在尝试快速完成波纹线,但要在 Typescript 中完成,以便我可以循环浏览按键。我怎样才能做到这一点?如何将Firebase查询返回的打字稿中的快照投射到[string: AnyObject]
let snapValue = snap.value as! [String: AnyObject]
TypeScript查询:
const userRef = admin.database().ref('PeopleWhoFollowMe').child(uid)
const fetchAndUpdate = userRef.once('value')
.then(snap => {
答案 0 :(得分:2)
查询中的snap
是DataSnapshot类型的对象。单击该链接以阅读其API文档。
您可以使用其val()方法获取DataSnapshot的原始JavaScript数据对象。然后,您可以使用已经在Stack Overflow上广泛讨论的任何常规JavaScript技术来迭代其属性:Iterate through object properties
答案 1 :(得分:0)
您可以按照Firestore documentation中的描述编写自己的转换器。
firebase.firestore.FirestoreDataConverter<T>
-withConverter()
使用的转换器,将T类型的用户对象转换为Firestore数据。
使用转换器,您可以在从Firestore存储和检索对象时指定通用类型参数。
class Post {
constructor(readonly title: string, readonly author: string) {}
toString(): string {
return this.title + ', by ' + this.author;
}
}
const postConverter = {
toFirestore(post: Post): firebase.firestore.DocumentData {
return {title: post.title, author: post.author};
},
fromFirestore(
snapshot: firebase.firestore.QueryDocumentSnapshot,
options: firebase.firestore.SnapshotOptions
): Post {
const data = snapshot.data(options)!;
return new Post(data.title, data.author);
}
};
const postSnap = await firebase.firestore()
.collection('posts')
.withConverter(postConverter)
.doc().get();
const post = postSnap.data();
if (post !== undefined) {
post.title; // string
post.toString(); // Should be defined
post.someNonExistentProperty; // TS error
}