如何使用打字稿将快照值转换为字典值?

时间:2019-05-24 03:20:40

标签: swift typescript firebase firebase-realtime-database

如何将快照值转换为[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 => {

2 个答案:

答案 0 :(得分:2)

查询中的snapDataSnapshot类型的对象。单击该链接以阅读其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
}