En firebase-admin@10 solía recuperar los datos del documento usando este enfoque:
const userRef = await firestore() .collection('users') .withConverter(UserConverter) .doc(userId) .get(); const userData = userRef.data(); Pero recientemente actualicé a firebase-admin@11 y ahora llamar a userRef.data() un error:
TypeError: el lado derecho de 'instanceof' no es un objeto'.
Intenté cambiar a la versión 10 y resolvió el problema. Pero me gustaría saber cuál es la solución correcta en la última versión; no pude encontrarla.
actualización Encontré la fuente del problema: en mi UserConverter tengo una verificación de este tipo:
import { firestore } from "firebase-admin"; import { DateTime } from "luxon"; import { UserEntity } from "../entities"; export class UserEntityConverter implements firestore.FirestoreDataConverter<UserEntity> { toFirestore(modelObject: UserEntity): firestore.DocumentData; toFirestore(modelObject: Partial<UserEntity>, options: firestore.SetOptions): firestore.DocumentData; toFirestore(modelObject: UserEntity | Partial<UserEntity>, options?: firestore.SetOptions): firestore.DocumentData { return { balance: modelObject.balance, lastLoggedAt: modelObject.lastLoggedAt?.toJSDate() || null, }; } fromFirestore(snapshot: firestore.QueryDocumentSnapshot<firestore.DocumentData>): UserEntity { const data = snapshot.data(); userEntity.balance = snapshot.balance; const lastLoggedAtData = data.lastLoggedAt; // this is where it breaks now: `firestore.Timestamp === undefined` if (lastLoggedAtData && lastLoggedAtData instanceof firestore.Timestamp) { userEntity.collectedRewardAt = DateTime.fromMillis(collectedRewardAtData.toMillis()); } } La fuente del problema es firestore.Timestamp : ahora no está undefined por alguna razón (aunque todavía está presente en los tipos).