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
}