angular / angular/angularfire

Type Error: toDate() not found on Timestamp fields in 21.0.0-rc.0

未關閉
#3,681 2 則留言 1 個 reaction 已指派 0 人 在 GitHub 檢視
comp: firestore comp: typings needs: more info type: bug version: current (v17+)
主要語言
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

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。