【发布时间】:2020-07-31 04:59:04
【问题描述】:
我有一个包含模型类的 TypeScript 文件。这个模型类映射我的 Firestore 中的文档。该类可以具有以下字段:
class MyObject {
myName: string;
myAge: number;
myFriends: Array<string>
// contructor
}
Firebase API 提供 FirebaseDataConverter 来转换该类对象中的文档数据,反之亦然。我将此添加到我的模型类中:
class MyObject {
//...
static firestoreConverter: firebase.firestore.FirestoreDataConverter<MyObject> = {
toFirestore: function (myObject: MyObject): firebase.firestore.DocumentData {
return JSON.parse(JSON.stringify(myObject));
}
fromFirestore: function (snapshot: firebase.firestore.QueryDocumentSnapshot<MyObject>, options: firebase.firestore.SnapshotOptions): MyObject {
let docData = snapshot.data(options);
let data = JSON.parse(JSON.stringify(docData));
// call constructor with fields from data
return new MyObject(...);
}
}
}
现在我可以将此转换器添加到集合引用中:
import * as firebase from 'firebase';
// initialize firebase etc.
const firestore = firebase.firestore();
const myCollectionRef = firestore.collection("MyCollection").withConverter(MyObject.firestoreConverter);
通过这种机制,我可以直接检索 MyObjects,而不必在每次读取、写入等时解析它们。
到目前为止,这适用于 JavaScript Web 库。我现在想将此机制与 Admin SDK 一起使用。首先一切似乎都很好:
import * as admin from "firebase-admin";
// initialize firebase etc.
const firestore = admin.firestore();
const myCollectionRef = firestore.collection("MyCollection").withConverter(MyObject.firestoreConverter);
但如果我得到一个文档并尝试使用doc.data() 访问内容,它会显示Type 'unknown' is not assignable to type 'MyObject'.
myCollectionRef.doc("myId").get().then(snapshot => {
let myObject: MyObject = snapshot.data();
});
有谁知道我必须更改什么才能接收MyObject 而不是unknown?
编辑
它似乎不受here 所述的支持。切换“Web”以查看 JavaScript 示例。切换“Node.js”以查看它只使用纯 JavaScript 对象。我仍然想知道为什么这是不可能的。 Firestore 对象不是同类型吗?!
【问题讨论】:
标签: typescript firebase google-cloud-firestore