Я использую 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>
Как я могу объявить интерфейсы, чтобы я мог знать тип полученного объекта?