firebase / firebase/firebase-admin-node

[FR]: Why FirestoreDataConverter does not have two generics?

Open
#2,194 0 comments 0 reactions 0 assignees View on GitHub
type: feature request
Dominant language
TypeScript
Stars
1.7k
Forks
419
Avg merge
3d 10h
Merged PRs (30d)
16

Description

**Is your feature request related to a problem? Please describe.**
Add new generics type for fromFirestore in FirestoreDataConverter.

**Describe the solution you'd like**

Hi, I have suggestion about type of FirestoreDataConverter.
Although QueryDocumentSnapshot has generics type, FirestoreDataConverter has no generics except T.
Colud you add generics type S for QueryDocumentSnapshot in "fromFirestore" ?

```
export interface FirestoreDataConverter {
/**
* Called by the Firestore SDK to convert a custom model object of type T
* into a plain Javascript object (suitable for writing directly to the
* Firestore database). To use set() with `merge` and `mergeFields`,
* toFirestore() must be defined with `Partial`.
*
* The `WithFieldValue` type extends `T` to also allow FieldValues such
* as `FieldValue.delete()` to be used as property values.
*/
toFirestore(modelObject: WithFieldValue): DocumentData;

/**
* Called by the Firestore SDK to convert a custom model object of type T
* into a plain Javascript object (suitable for writing directly to the
* Firestore database). To use set() with `merge` and `mergeFields`,
* toFirestore() must be defined with `Partial`.
*
* The `PartialWithFieldValue` type extends `Partial` to allow
* FieldValues such as `FieldValue.delete()` to be used as property values.
* It also supports nested `Partial` by allowing nested fields to be
* omitted.
*/
toFirestore(
modelObject: PartialWithFieldValue,
options: SetOptions
): DocumentData;

/**
* Called by the Firestore SDK to convert Firestore data into an object of
* type T.
*/
fromFirestore(snapshot: QueryDocumentSnapshot): T;
}
```

```
export class QueryDocumentSnapshot<
T = DocumentData
> extends DocumentSnapshot {
private constructor();

/**
* The time the document was created.
*/
readonly createTime: Timestamp;

/**
* The time the document was last updated (at the time the snapshot was
* generated).
*/
readonly updateTime: Timestamp;

/**
* Retrieves all fields in the document as an Object.
*
* @override
* @return An Object containing all fields in the document.
*/
data(): T;
}
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.