如何使用 Typescript 从 firebase (8+) 正确导入 Timestamp 类

Raf*_*olo 2 firebase typescript google-cloud-firestore

我使用的是 firebase 7.16.1,我以这种方式导入并声明一个属性作为时间戳:

import { firestore } from 'firebase/app';

export class CourseEventMessage {
  sentTimestamp: firestore.Timestamp;
}
Run Code Online (Sandbox Code Playgroud)

但升级到 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)
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下导入,所有导入都正常,但导入上不存在时间戳。

import firestore from "../../../node_modules/firebase"; 
import firestore from 'firebase';
import firestore from 'firebase/app';
Run Code Online (Sandbox Code Playgroud)

我发现导入时间戳的唯一方法是:

import * as firebase from 'firebase/app';

export class CourseEventMessage {
    sentTimestamp: firebase.default.firestore.Timestamp;
}
Run Code Online (Sandbox Code Playgroud)

那么导入 Timestamp 类的正确方法是什么?

Dou*_*son 9

在 v8 中,所有 Firebase 产品的所有类型都应来自“firebase/app”。通常像这样开始导入,正如您在模块捆绑器的文档中看到的那样:

import firebase from "firebase/app"
Run Code Online (Sandbox Code Playgroud)

不要使用 v7 中的旧形式:

import * as firebase from "firebase/app"  // this no longer works the way you expect
Run Code Online (Sandbox Code Playgroud)

时间戳可以在 中找到firebase.firestore.Timestamp

import firebase from 'firebase/app';

export class CourseEventMessage {
    sentTimestamp: firebase.firestore.Timestamp;
}
Run Code Online (Sandbox Code Playgroud)

如果您想稍微缩写一下,请使用类型别名:

type Timestamp = firebase.firestore.Timestamp;
export class CourseEventMessage {
    sentTimestamp: Timestamp;
}
Run Code Online (Sandbox Code Playgroud)