Type Error: toDate() not found on Timestamp fields in 21.0.0-rc.0
- 主要语言
- TypeScript
- 星标
- 7.8k
- 派生
- 2.2k
- 平均合并
- 22 小时 28 分钟
- 30 天内合并 PR
- 6
描述
## Issue
After upgrading to `@angular/fire@21.0.0-rc.0`, TypeScript compilation fails when calling `.toDate()` on `Timestamp` fields from Firestore documents.
## Error
```
TS2339: Property 'toDate' does not exist on type 'FieldValue | WithFieldValue'.
Property 'toDate' does not exist on type 'FieldValue'.
```
## Reproduction
```typescript
import { doc, docData, Timestamp } from '@angular/fire/firestore';
interface Member {
createdAt: Timestamp;
}
const member$ = docData(doc(firestore, 'members/123') as DocumentReference);
member$.subscribe((member) => {
// ERROR: Property 'toDate' does not exist
const date = member?.createdAt.toDate();
});
```
## Environment
- @angular/fire: 21.0.0-rc.0
- @angular/core: 21.0.1
- firebase: 12.6.0 (from 11.8.0)
- TypeScript: 5.9.3
## Analysis
`Timestamp` fields are being typed as `FieldValue | WithFieldValue` instead of just `Timestamp`. The `WithFieldValue` type (meant for writes) is incorrectly being applied to read operations, causing TypeScript to think the field could be `FieldValue`, which doesn't have `.toDate()`.
This appears to be a regression from the Firebase SDK v11→v12 upgrade in this RC.
贡献指南
调研方向
首先在提供的包含 docData 和 DocumentReference 的示例中重现 TypeScript 错误,然后跟踪围绕 Timestamp、FieldValue 和 WithFieldValue 的 Firestore 读取操作类型。比较受影响的 Firebase SDK 版本,并确定读取结果在哪里获得了面向写入的联合类型。当示例能够编译,并且 Timestamp 字段在没有 FieldValue 类型的情况下提供 toDate() 时,即表示完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- firebase, typescript
- 领域
- database
- Issue 类型
- 缺陷
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 活跃度
- 冷清
- 描述清晰度
- 基本清楚
- 新手友好度
- 65/100