Hur man korrekt importerar Timestamp-klassen från Firebase (8+) med TypeScript


Jag använde Firebase 7.16.1 och jag importerade och deklarerade en egenskap som Timestamp på detta sätt:

import { firestore } from 'firebase/app';

export class CourseEventMessage {
  sentTimestamp: firestore.Timestamp;
}

Men efter uppgraderingen till Firebase 8.1.2 får importen ett fel:

Module '"../../../node_modules/firebase"' has no exported member 'firestore'. Did you mean to use 'import firestore from "../../../node_modules/firebase"' instead?ts(2614)

Jag har försökt med följande importer, alla importeras utan problem, men ingen tidsstämpel finns på importen.

import firestore from "../../../node_modules/firebase"; 
import firestore from 'firebase';
import firestore from 'firebase/app';

Det enda sättet jag kunde hitta som importerade Timestamp var:

import * as firebase from 'firebase/app';

export class CourseEventMessage {
    sentTimestamp: firebase.default.firestore.Timestamp;
}

Så vad är det korrekta sättet att importera Timestamp-klassen?

Svar #1

I v8 bör alla typer för alla Firebase-produkter komma från "firebase/app". Det är vanligt att starta en import på detta sätt, som du ser i dokumentationen för modulbundlare:

import firebase from "firebase/app"

Använd INTE den gamla formen från v7:

import * as firebase from "firebase/app"  // this no longer works the way you expect

Tidsstämpel kan hittas i firebase.firestore.Timestamp.

import firebase from 'firebase/app';

export class CourseEventMessage {
    sentTimestamp: firebase.firestore.Timestamp;
}

Om du vill förkorta det lite, använd en typalias:

type Timestamp = firebase.firestore.Timestamp;
export class CourseEventMessage {
    sentTimestamp: Timestamp;
}

Svar #2

För v9 är det: import { Timestamp } från 'firebase/firestore';