-
Notifications
You must be signed in to change notification settings - Fork 408
Open
Description
Version info
React:
Firebase:
ReactFire:
4.2.2
Other (e.g. Node, browser, operating system) (if applicable):
Test case
const myDoc = useFirestoreDoc(myRef);
console.log(myDoc.data.data().anyProperty); // <- will throw an error accessing "data.data()" since it
Steps to reproduce
Description
The Firestore access hooks, e.g. useFirestoreDoc(), useFirestoreCollection() etc, all return an ObservableStatus object. The ObservableStatus interface guarantees the presence of data, which is untrue, since it will initially be undefined (unless using suspense).
Currently, ObservableStatus is defined as follows:
export interface ObservableStatus<T> {
status: 'loading' | 'error' | 'success';
hasEmitted: boolean; // has received at least one value
isComplete: boolean;
data: T;
error: Error | undefined;
firstValuePromise: Promise<void>;
}Expected behavior
const myDoc = useFirestoreDoc(myRef);
console.log(myDoc.data.data().anyProperty); // <- will throw an error accessing "data.data()" since it
// ^^^^^^^
// Type Error: data may be undefined
I expect the types to indicate that Observable::data is either T | undefined.
Actual behavior
The type system does not warn you when accessing properties on data while it's undefined.
At run time it throws an error attempting to access properties on undefined.
devth
Metadata
Metadata
Assignees
Labels
No labels