Firebase 类型和默认的非隐式依赖 tslint.json

Firebase types and no-implicit-dependencies with default tslint.json

在阅读了最新的 Firebase 博客 post Why you should use TypeScript for writing Cloud Functions 之后,我决定尝试 tslint,结果非常棒,尽管我的类型有问题。

我有这样的导入语句

import { DocumentSnapshot, DocumentReference, QuerySnapshot, WriteResult, Transaction, WriteBatch } from '@google-cloud/firestore';

但即使我的代码运行良好,tslint 也会告诉我以下内容。

[tslint] Module '@google-cloud/firestore' is not listed as dependency in package.json (no-implicit-dependencies)

对于 using/importing 类型,Firebase + TypeScript 的最佳实践是什么?

如果您希望能够从模块中导入一些定义,则必须将该模块声明为依赖项。这些出现在 functions 下的 package.json 文件中。如果你希望能够从@google-cloud/firestore导入,那么你需要添加对它的依赖:

npm install @google-cloud/firestore

现在,您可能想知道为什么可以在不声明该依赖项的情况下使用 Firestore。这是因为 Firebase Admin SDK 自身依赖于 Firestore SDK。因此,当您直接使用 Admin SDK 时,您可以访问 Firestore SDK 创建的对象。但是,当你不自己声明依赖时,你自己的模块不能直接从它导入。

我同意接受的答案。

或者,由于 Admin SDK 已经有 firestore 依赖,您可以直接使用 admin.firestore.QuerySnapshotadmin.firestore.DocumentSnapshot 等而不是安装 @google-cloud/firestore

这是更好的方法。您可以使用它访问所有内容。

这是我的做法。它不需要添加 '@google-cloud/firestore' 作为项目的依赖项,并且从代码中消除了很多 admin.firestore.xxx

import * as admin from "firebase-admin";

import FieldValue = admin.firestore.FieldValue;
import DocumentSnapshot = admin.firestore.DocumentSnapshot;
// import anything else you want to alias

someRef.set({timestamp: FieldValue.serverTimestamp()});