Как настроить интерфейс DocumentData для Firebase? - PullRequest
0 голосов
/ 07 декабря 2018

Я использую firebase@5.5.8 и typescript@3.1.4

всякий раз, когда я создаю документ из firestore, я получаю объект типа firebase.firestore.DocumentReference, как и ожидалось

Если явызовите get(options?: firebase.firestore.GetOptions|undefined) Я получу объект типа firebase.firestore.DocumentSnapshot, как и ожидалось

Если я вызову data(options?: firebase.firestore.DataOptions|undefined), я получу либо объект firebase.firestore.DocumentData, либо неопределенный, как и ожидалось

Теперь, на моем объекте менеджера, я знаю, что пишу в базу данных, поэтому я могу утверждать, что независимо от того, какие DocumentData вы получите от моего менеджера, вы получите Client, как показано

export interface Client {
    name: string;
    website?: string;
    description?: string;
    visible: boolean;
}

Я хочу создать интерфейс для моего объекта менеджера, который выражает это.Итак, я попробовал:

export interface FirebaseDocumentSnapshot<T> extends $firebase.firestore.DocumentSnapshot {
    data(options?: $firebase.firestore.SnapshotOptions | undefined): T|undefined
}

export interface FirebaseDocumentReference<T> extends $firebase.firestore.DocumentReference {
    get(options?: $firebase.firestore.GetOptions | undefined): Promise<FirebaseDocumentSnapshot<T>>
}

Проблема, с которой я столкнулся, здесь:

const client: Client = mapClient(args);

const result: FirebaseDocumentReference<Client> = await $db.add(client);

ошибка:

[ts]

Type 'DocumentReference' is not assignable to type 'FirebaseDocumentReference<Client>'.
  Types of property 'get' are incompatible.
    Type '(options?: GetOptions | undefined) => Promise<DocumentSnapshot>' is not assignable to type '(options?: GetOptions | undefined) => Promise<FirebaseDocumentSnapshot<Client>>'.
      Type 'Promise<DocumentSnapshot>' is not assignable to type 'Promise<FirebaseDocumentSnapshot<Client>>'.
        Type 'DocumentSnapshot' is not assignable to type 'FirebaseDocumentSnapshot<Client>'.
          Types of property 'data' are incompatible.
            Type '(options?: SnapshotOptions | undefined) => DocumentData | undefined' is not assignable to type '(options?: SnapshotOptions | undefined) => Client | undefined'.
              Type 'DocumentData | undefined' is not assignable to type 'Client | undefined'.
                Type 'DocumentData' is not assignable to type 'Client'.
                  Property 'name' is missing in type 'DocumentData'. [2322]
const result: FirebaseDocumentReference<Client>

Как я могу объявить интерфейсы, чтобы я мог знать тип полученного объекта?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...