angular - firebase.firestore.FieldValue.serverTimestamp() stöder inte datatypen Timestamp
async createUser(uid: string, email: string) {
await this.afs.doc<UserProfileModel>(FirestoreDbConstant.USER_PROFILES + `/${uid}`).set({
email,
createdDate: firebase.firestore.FieldValue.serverTimestamp(),
});
}
Den här modellen fungerar
export interface UserProfileModel {
email: string;
createdDate?: firebase.firestore.FieldValue;
}
Men varför kan jag inte använda Timestamp här på det här sättet?
import { Timestamp } from '@firebase/firestore-types';
export interface UserProfileModel {
email: string;
createdDate?: Timestamp;
}
Då ger det detta fel:
(egenskap) UserProfileModel.createdDate?: Timestamp Typen 'FieldValue' saknar följande egenskaper från typen 'Timestamp': seconds, nanoseconds, toDate, toMillis(2739) user-profile.model.ts(11, 5): Den förväntade typen kommer från egenskapen 'createdDate' som deklareras här på typen 'UserProfileModel'
Problemet här är att jag behöver använda toDate() på mallen. Men det fungerar inte med createdDate?: firebase.firestore.FieldValue;
<p>{{invitedEvent.startDatetime.toDate() | amDateFormat: 'MMM DD'}}</p>
Svar #1
Som du kan se från JavaScript-API-dokumentationen för serverTimestamp():
serverTimestamp(): FieldValue
Returnerar en vaktpost som används med set() eller update() för att inkludera ett servergenererat tidsstämpel i de skrivna uppgifterna.
Returnerar FieldValue
Den returnerar inte en Timestamp-typ. Den returnerar ett FieldValue, vars värde egentligen bara är en platshållare för ett speciellt värde som berättar för servern att generera tidsstämpeln. Klienten genererar inte denna tidsstämpel alls, eftersom vi inte kan lita på klientenhetens klocka.
Detta betyder att du egentligen inte kan använda samma modell för att läsa och skriva poster som använder server-tidsstämplar. På vägen in kommer det att vara ett FieldValue. På vägen ut (när du frågar dokumentet) kommer det att vara en Timestamp.
Svar #2
Det här kan vara bättre än 'någon' eller att duplicera modeller :
lastModified: Timestamp | FieldValue;