【发布时间】:2022-06-13 19:40:37
【问题描述】:
当我从 firestore 获取数据时,我正在尝试使用我们在客户端代码中使用的现有转换器,客户端转换器可以工作,但是当我尝试在管理 SDK 上使用它时,它会抛出一些令人困惑的类型错误:
客户端代码(工作)
async function getUser() {
const db = getFirestore(); // from '@firebase/firestore'
const userSnap = await getDoc(
doc(db, 'users/Vl7vMV6AIrUFRL9iFkCWN8tgaXE2').withConverter(
aphexUserConverter
)
);
if (!userSnap.exists()) {
return null;
}
const user = userSnap.data();
return user;
}
服务器端/管理 SDK(错误)
async function getUser() {
const db = admin.firestore(); // from 'firebase-admin'
const snap = await db
.collection('users')
.doc('Vl7vMV6AIrUFRL9iFkCWN8tgaXE2')
.withConverter(aphexUserConverter)
.get();
if (!snap.exists) {
return null;
}
const user = snap.data();
return user;
}
错误截图
转换器
const aphexUserConverter: FirestoreDataConverter<AphexUser> = {
toFirestore(data: PartialWithFieldValue<AphexUser>): DocumentData {
const user: PartialWithFieldValue<AphexUser> = {};
if ('id' in data) {
user.id = data.id;
}
if ('email' in data) {
user.email = data.email;
}
if ('displayName' in data) {
user.displayName = data.displayName;
}
if ('color' in data) {
user.color = data.color;
}
if ('avatarUrl' in data) {
user.avatarUrl = data.avatarUrl;
}
if ('status' in data) {
user.status = data.status;
}
if ('jobTitle' in data) {
user.jobTitle = data.jobTitle;
}
if ('phoneNumber' in data) {
user.phoneNumber = data.phoneNumber;
}
if ('providerIds' in data) {
user.providerIds = data.providerIds;
}
return user;
},
fromFirestore: (
snap: QueryDocumentSnapshot,
options: SnapshotOptions
): AphexUser => {
const data = snap.data(options);
const user: AphexUser = {
id: snap.id,
color: data.color,
email: data.email,
status: data.status,
jobTitle: data.jobTitle,
avatarUrl: data.avatarUrl,
displayName: data.displayName,
phoneNumber: data.phoneNumber,
providerIds: data.providerIds,
};
return user;
},
};
有人知道解决办法吗?我似乎无法使用打字稿在线找到其他示例。
【问题讨论】:
标签: node.js typescript firebase google-cloud-firestore converters