如何为firestorewithconverter()创建一个TypeScript通用转换器?



我使用的是Firebase JavaScript Version 9 SDK。

和我试图使用withConverter()转换数据来从Firestore与TypeScript接口。

这里有一篇文章解释了如何使用通用转换器来实现它。它允许您创建一个通用转换器并重用它,而不是为每个接口创建新的转换器逻辑。这里是一个GIST,其中包含文章中的所有代码和注释,可以很好地解释它。

下面是我实现通用转换器的尝试:

interface User {
id?: string;
name: string;
}
const converter = <T>() => ({
toFirestore: (data: Partial<T>) => data,
fromFirestore: (snap: FirebaseFirestore.QueryDocumentSnapshot) =>
snap.data() as T,
});
const userDocRef = doc(db, 'users', 'my-user-id').withConverter(
converter<User>() // <-- Error here
);

但是我在converter<User>()上得到这个TypeScript错误,说:

No overload matches this call.
Overload 1 of 2, '(converter: null): DocumentReference<DocumentData>', gave the following error.
Overload 2 of 2, '(converter: FirestoreDataConverter<User>): DocumentReference<User>', gave the following error. ts(2769)

为什么我得到这个错误?

我明白了

当查看此帮助文档时,我发现Version 9 SDK的正确转换器类型是PartialWithFieldValueQueryDocumentSnapshot

下面是完整的正确代码:

interface User {
id?: string;
name: string;
}
const converter = <T>() => ({
toFirestore: (data: PartialWithFieldValue<T>) => data,
fromFirestore: (snap: QueryDocumentSnapshot) => snap.data() as T,
});
const userDocRef = doc(db, 'users', 'my-user-id').withConverter(
converter<User>()
);

现在userDocRefDocumentReference<User>的类型。

相关内容

  • 没有找到相关文章