FirestoreDataConverter interface

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
}