如何在Node.js的Firestore中为查询添加类型以避免强制转换?
为Firestore查询添加类型以避免强制转换
当然可以通过Firestore的泛型支持实现,完全不需要依赖as进行强制转换。核心思路是给集合引用指定泛型类型,让TypeScript自动推断文档数据的类型。
具体实现步骤:
- 在
collection()方法中传入泛型<Playlist>,这样集合及基于它创建的查询都会关联Playlist类型 - 查询返回的
QuerySnapshot和QueryDocumentSnapshot会自动携带该类型,调用data()时直接返回Playlist | undefined(考虑文档可能不存在的情况)
修改后的代码示例:
// 给集合指定泛型类型 const queryRef = firestore.collection<Playlist>('playlists').where('machines', 'array-contains', id); const snapshot = await queryRef.get(); // 遍历快照中的文档 snapshot.forEach(document => { // document.data() 自动推断为 Playlist | undefined const playlist = document.data(); if (playlist) { // 此时playlist类型为Playlist,无需强制转换 console.log(playlist); } });
单个文档引用的类型处理:
如果是针对单个文档的查询,同样可以用泛型指定类型:
const docRef = firestore.doc<Playlist>(`playlists/${playlistId}`); const doc = await docRef.get(); const playlist = doc.data(); // 类型为 Playlist | undefined
这种方式不仅省去了强制转换的代码,还能让TypeScript在编译阶段就校验数据结构是否符合Playlist类型,提前规避潜在的运行时错误。
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

