FirestoreDataConverter interface

Conversor usado por withConverter() para transformar objetos de usuário do tipo AppModelType em dados Firestore do tipo DbModelType .

O uso do conversor permite especificar argumentos de tipo genérico ao armazenar e recuperar objetos do Firestore.

Assinatura:

export declare interface FirestoreDataConverter<AppModelType, DbModelType extends DocumentData = DocumentData> 

Métodos

Método Descrição
fromFirestore(instantâneo, opções) Chamado pelo SDK do Firestore para converter dados do Firestore em um objeto do tipo AppModelType . Você pode acessar seus dados chamando: snapshot.data(options) . Geralmente, os dados retornados de snapshot.data() podem ser convertidos em DbModelType ; no entanto, isso não é garantido, pois as gravações no banco de dados podem ter ocorrido sem um conversor de tipo aplicando esse layout específico.
toFirestore(modelObject) Chamado pelo SDK do Firestore para converter um objeto de modelo personalizado do tipo AppModelType em um objeto JavaScript simples (adequado para gravar diretamente no banco de dados do Firestore) do tipo DbModelType . Para usar set() com merge e mergeFields , toFirestore() deve ser definido com PartialWithFieldValue<AppModelType> . O tipo WithFieldValue<T> estende T para também permitir que FieldValues, como deleteField(), sejam usados ​​como valores de propriedade.
toFirestore(modelObject, opções) Chamado pelo SDK do Firestore para converter um objeto de modelo personalizado do tipo AppModelType em um objeto JavaScript simples (adequado para gravar diretamente no banco de dados do Firestore) do tipo DbModelType . Usado com setDoc() e com merge:true ou mergeFields . O tipo PartialWithFieldValue<T> estende Partial<T> para permitir que FieldValues, como arrayUnion(), sejam usados ​​como valores de propriedade. Ele também oferece suporte Partial aninhado, permitindo que os campos aninhados sejam omitidos.

FirestoreDataConverter.fromFirestore()

Chamado pelo SDK do Firestore para converter dados do Firestore em um objeto do tipo AppModelType . Você pode acessar seus dados chamando: snapshot.data(options) .

Geralmente, os dados retornados de snapshot.data() podem ser convertidos em DbModelType ; no entanto, isso não é garantido, pois as gravações no banco de dados podem ter ocorrido sem um conversor de tipo aplicando esse layout específico.

Assinatura:

fromFirestore(snapshot: QueryDocumentSnapshot<DocumentData, DocumentData>, options?: SnapshotOptions): AppModelType;

Parâmetros

Parâmetro Tipo Descrição
instantâneo QueryDocumentSnapshot < DocumentData , DocumentData > Um QueryDocumentSnapshot contendo seus dados e metadados.
opções Opções de Instantâneo As SnapshotOptions da chamada inicial para data() .

Retorna:

AppModelType

FirestoreDataConverter.toFirestore()

Chamado pelo SDK do Firestore para converter um objeto de modelo personalizado do tipo AppModelType em um objeto JavaScript simples (adequado para gravar diretamente no banco de dados do Firestore) do tipo DbModelType . Para usar set() com merge e mergeFields , toFirestore() deve ser definido com PartialWithFieldValue<AppModelType> .

O tipo WithFieldValue<T> estende T para também permitir que FieldValues, como deleteField(), sejam usados ​​como valores de propriedade.

Assinatura:

toFirestore(modelObject: WithFieldValue<AppModelType>): WithFieldValue<DbModelType>;

Parâmetros

Parâmetro Tipo Descrição
modelObject WithFieldValue <AppModelType>

Retorna:

WithFieldValue <DbModelType>

FirestoreDataConverter.toFirestore()

Chamado pelo SDK do Firestore para converter um objeto de modelo personalizado do tipo AppModelType em um objeto JavaScript simples (adequado para gravar diretamente no banco de dados do Firestore) do tipo DbModelType . Usado com setDoc() , e com merge:true ou mergeFields .

O tipo PartialWithFieldValue<T> estende Partial<T> para permitir que FieldValues, como arrayUnion(), sejam usados ​​como valores de propriedade. Ele também oferece suporte Partial aninhado, permitindo que os campos aninhados sejam omitidos.

Assinatura:

toFirestore(modelObject: PartialWithFieldValue<AppModelType>, options: SetOptions): PartialWithFieldValue<DbModelType>;

Parâmetros

Parâmetro Tipo Descrição
modelObject PartialWithFieldValue <AppModelType>
opções Definir opções

Retorna:

PartialWithFieldValue <DbModelType>

Exemplo

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
}