为什么TypeScript中给Chat类型变量赋值时报ts(2739)缺失属性错误?
报错原因分析
- Firestore 默认返回的
doc.data()类型是无明确字段定义的DocumentData类型,TypeScript 无法自动识别该对象包含message、name、createdAt三个必填字段,仅能识别到你手动补充的id字段,因此判定最终对象不符合Chat接口的类型要求。 - 代码中存在字段拼写错误,判断逻辑里写的是
doc.data().createdAT(末尾AT大写),但Chat接口定义的字段是createdAt(末尾at小写),拼写不一致会导致运行时判断失效,也会间接影响类型校验结果。
修复方案
- 给
doc.data()添加类型断言,明确告知 TypeScript 它的结构符合Chat接口除id外的字段要求,修改赋值语句为:
const x: Chat = { ...doc.data() as Omit<Chat, 'id'>, id: doc.id }
- (可选,更规范)在声明集合引用时直接传入泛型,让 Firestore 自动识别返回的文档类型:
修改collect(projectFirestore, collection)为:
collect<Omit<Chat, 'id'>>(projectFirestore, collection)
修改后doc.data()会默认匹配你传入的泛型类型,不需要再单独做断言。
3. 修复拼写错误,将判断语句doc.data().createdAT && results.push(x)改为:
doc.data().createdAt && results.push(x)
内容的提问来源于stack exchange,提问作者maxweld
相关产品推荐
相关产品推荐

