Добавить набор текста в запрос коллекции Firebase - PullRequest
1 голос
/ 04 февраля 2020

У меня есть такая функция:

async queryAll(): Promise<Product[]> {
  const response = await this.firestore.collection('products').get();
  return response.docs.map(a => a.data());
}

И получение ошибки:

Тип «DocumentData []» нельзя назначить типу «Product []». Типу «DocumentData» не хватает следующих свойств из типа «Product»: идентификатор, имя

Как добавить правильные возвращаемые типы для этого метода?

Что можно увидеть в firebase/index.ts.d, get типы функций выглядят так (я использую пакет npm firebase):

get(options?: GetOptions): Promise<QuerySnapshot<T>>;

Но не уверен, как применить это к моему коду.

1 Ответ

0 голосов
/ 05 февраля 2020

Я нашел решение, нужно использовать withConverter , чтобы добавить наборы при извлечении данных из коллекций пожарного магазина

Добавлен рабочий пример, функция result из dbQuery должна иметь правильную тип ig Product[]

import firebase from 'firebase';
import { firebaseConfig } from '../firebaseConfig';

export interface Product {
  name: string;
}

export const productConverter = {
  toFirestore(product: Product): firebase.firestore.DocumentData {
    return { name: product.name };
  },

  fromFirestore(
    snapshot: firebase.firestore.QueryDocumentSnapshot,
    options: firebase.firestore.SnapshotOptions
  ): Product {
    const data = snapshot.data(options)!;
    return { name: data.name }
  }
};

async function dbQuery() {
  firebase.initializeApp(firebaseConfig);
  const db = firebase.firestore();
  const response = await db.collection("products").withConverter(productConverter).get();
  const result = response.docs.map(doc => {
    const data = doc.data();
    return data;
  });

  return result; // result type is Product[]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...