Convertidor utilizado por withConverter()
para transformar objetos de usuario de tipo AppModelType
en datos de Firestore de tipo DbModelType
.
El uso del convertidor le permite especificar argumentos de tipo genérico al almacenar y recuperar objetos de Firestore.
Firma:
export declare interface FirestoreDataConverter<AppModelType, DbModelType extends DocumentData = DocumentData>
Métodos
Método | Descripción |
---|---|
fromFirestore(instantánea, opciones) | Lo llama el SDK de Firestore para convertir los datos de Firestore en un objeto de tipo AppModelType . Puede acceder a sus datos llamando a: snapshot.data(options) . En general, los datos devueltos por snapshot.data() se pueden convertir a DbModelType ; sin embargo, esto no está garantizado, ya que es posible que se hayan producido escrituras en la base de datos sin que un convertidor de tipo imponga este diseño específico. |
toFirestore(objetomodelo) | Lo llama el SDK de Firestore para convertir un objeto de modelo personalizado de tipo AppModelType en un objeto de JavaScript sin formato (adecuado para escribir directamente en la base de datos de Firestore) de tipo DbModelType . Para usar set() con merge y mergeFields , toFirestore() debe definirse con PartialWithFieldValue<AppModelType> . El tipo WithFieldValue<T> extiende T para permitir que también se usen FieldValues como deleteField() como valores de propiedad. |
toFirestore(modeloObjeto, opciones) | Lo llama el SDK de Firestore para convertir un objeto de modelo personalizado de tipo AppModelType en un objeto de JavaScript sin formato (adecuado para escribir directamente en la base de datos de Firestore) de tipo DbModelType . Usado con setDoc() , y con merge:true o mergeFields . El tipo PartialWithFieldValue<T> extiende Partial<T> para permitir que FieldValues como arrayUnion() se usen como valores de propiedad. También es compatible con Partial anidado al permitir que se omitan campos anidados. |
FirestoreDataConverter.fromFirestore()
Llamado por Firestore SDK para convertir datos de Firestore en un objeto de tipo AppModelType
. Puede acceder a sus datos llamando a: snapshot.data(options)
.
En general, los datos devueltos por snapshot.data()
se pueden convertir a DbModelType
; sin embargo, esto no está garantizado, ya que es posible que se hayan producido escrituras en la base de datos sin que un convertidor de tipo imponga este diseño específico.
Firma:
fromFirestore(snapshot: QueryDocumentSnapshot<DocumentData, DocumentData>, options?: SnapshotOptions): AppModelType;
Parámetros
Parámetro | Tipo | Descripción |
---|---|---|
instantánea | ConsultaDocumentoInstantánea < Datos del documento , DocumentoDatos > | Una QueryDocumentSnapshot que contiene sus datos y metadatos. |
opciones | InstantáneaOpciones | SnapshotOptions de la llamada inicial a data() . |
Devoluciones:
Tipo de modelo de aplicación
FirestoreDataConverter.toFirestore()
Llamado por el SDK de Firestore para convertir un objeto de modelo personalizado de tipo AppModelType
en un objeto JavaScript simple (adecuado para escribir directamente en la base de datos de Firestore) de tipo DbModelType
. Para usar set()
con merge
y mergeFields
, toFirestore()
debe definirse con PartialWithFieldValue<AppModelType>
.
El tipo WithFieldValue<T>
extiende T
para permitir que también se usen FieldValues como deleteField() como valores de propiedad.
Firma:
toFirestore(modelObject: WithFieldValue<AppModelType>): WithFieldValue<DbModelType>;
Parámetros
Parámetro | Tipo | Descripción |
---|---|---|
modeloObjeto | ConValorDeCampo <Tipo de modelo de aplicación> |
Devoluciones:
ConValorDeCampo <TipoModeloBD>
FirestoreDataConverter.toFirestore()
Llamado por el SDK de Firestore para convertir un objeto de modelo personalizado de tipo AppModelType
en un objeto JavaScript simple (adecuado para escribir directamente en la base de datos de Firestore) de tipo DbModelType
. Usado con setDoc() y con merge:true
o mergeFields
.
El tipo PartialWithFieldValue<T>
extiende Partial<T>
para permitir que FieldValues como arrayUnion() se usen como valores de propiedad. También es compatible con Partial
anidado al permitir que se omitan campos anidados.
Firma:
toFirestore(modelObject: PartialWithFieldValue<AppModelType>, options: SetOptions): PartialWithFieldValue<DbModelType>;
Parámetros
Parámetro | Tipo | Descripción |
---|---|---|
modeloObjeto | ParcialConValorDeCampo <Tipo de modelo de aplicación> | |
opciones | EstablecerOpciones |
Devoluciones:
ParcialConValorDeCampo <TipoModeloBD>
Ejemplo
class Post {
constructor(readonly title: string, readonly author: string) {}
toString(): string {
return this.title + ', by ' + this.author;
}
}
interface PostDbModel {
title: string;
author: string;
}
const postConverter = {
toFirestore(post: WithFieldValue<Post>): PostDbModel {
return {title: post.title, author: post.author};
},
fromFirestore(
snapshot: QueryDocumentSnapshot,
options: SnapshotOptions
): Post {
const data = snapshot.data(options) as PostDbModel;
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
}