Как правильно импортировать класс временных меток из firebase (8 ) с помощью Typescript

#typescript #firebase #google-cloud-firestore

# #машинописный текст #firebase #google-облако-firestore

Вопрос:

Я использовал firebase 7.16.1, и я импортировал и объявлял свойство как временную метку таким образом:

 import { firestore } from 'firebase/app';

export class CourseEventMessage {
  sentTimestamp: firestore.Timestamp;
}
 

Но после обновления до firebase 8.1.2 при импорте появляется ошибка:

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

Я пробовал следующие импортные операции, все они импортируются нормально, но при импорте не существует метки времени.

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

Единственный способ, которым я мог найти эту временную метку импорта, был:

 import * as firebase from 'firebase/app';

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

Итак, каков правильный способ импортировать класс Timestamp?

Ответ №1:

В версии 8 все типы для всех продуктов Firebase должны поступать из «firebase / app». Обычно импорт начинается так, как вы видите в документации для пакетов модулей:

 import firebase from "firebase/app"
 

НЕ используйте старую форму из версии 7:

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

Временную метку можно найти в firebase.firestore.Timestamp .

 import firebase from 'firebase/app';

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

Если вы хотите немного сократить это, используйте псевдоним типа:

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

Ответ №2:

Для версии 9 это: импортировать {Timestamp} из ‘firebase / firestore’;