Firebase创建集合时如何用变量作为集合名而非硬编码路径
问题解决:动态指定Firestore集合名称
你遇到的TypeScript错误,核心原因是错误地传递了数组类型参数给collection()函数,而非正确的「Firestore实例 + 字符串类型集合名称」组合。
错误根源
你尝试用['${this.Event}']的方式传递集合名,这会生成一个数组,但collection()函数的合法调用格式是:
collection(firestoreInstance: Firestore, collectionName: string)
当传入数组时,TypeScript会误将其判定为DocumentReference类型,触发类型不匹配的报错。
正确实现方式
你的原代码中collection(this.db, this.Event)其实是正确的动态指定集合名写法,只需确保this.Event是非空的字符串类型即可。如果仍有报错,可按以下步骤排查修正:
- 确认
this.Event已完成初始化,不是undefined或null - 若
this.Event类型不确定,手动转换为字符串:String(this.Event)
修正后的代码示例:
async addSongtoFire(description: string) { // 确保集合名称为有效字符串 const collectionName = String(this.Event); await addDoc(collection(this.db, collectionName), { Name: description, like: false, likes: 0 }); }
扩展提示
如果this.Event是包含层级的路径(比如"events/2024/songs"),collection()函数支持传入多个参数构建路径,示例:
// 等价于直接传入完整路径字符串 await addDoc(collection(this.db, ...this.Event.split('/')), { ... });
内容的提问来源于stack exchange,提问作者Rashorr
相关产品推荐
相关产品推荐

