Firebase 类型和具有默认 tslint.json 的无隐式依赖项
Posted
技术标签:
【中文标题】Firebase 类型和具有默认 tslint.json 的无隐式依赖项【英文标题】:Firebase types and no-implicit-dependencies with default tslint.json 【发布时间】:2018-06-30 03:59:16 【问题描述】:在阅读了最新的 Firebase 博客文章 Why you should use TypeScript for writing Cloud Functions 后,我决定尝试 tslint
,虽然我的类型有问题,但效果很棒。
我有这样的导入语句
import DocumentSnapshot, DocumentReference, QuerySnapshot, WriteResult, Transaction, WriteBatch from '@google-cloud/firestore';
但即使我的代码运行良好,tslint 也会告诉我以下内容。
[tslint] 模块“@google-cloud/firestore”未在 package.json 中列为依赖项(无隐式依赖项)
Firebase + TypeScript 使用/导入类型的最佳做法是什么?
【问题讨论】:
【参考方案1】:这是我的做法。它不需要将'@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());
【讨论】:
【参考方案2】:我同意接受的答案。
或者,由于Admin SDK已经有firestore依赖,你可以直接使用admin.firestore.QuerySnapshot
、admin.firestore.DocumentSnapshot
等,而不是安装@google-cloud/firestore
。
这是更好的方法。您可以使用它访问所有内容。
【讨论】:
【参考方案3】:如果您希望能够从模块中导入某些定义,则必须将该模块声明为依赖项。这些出现在functions
下的package.json
文件中。如果你希望能够从@google-cloud/firestore
导入,那么你需要添加一个依赖:
npm install @google-cloud/firestore
现在,您可能想知道为什么可以在不声明依赖关系的情况下使用 Firestore。这是因为 Firebase Admin SDK 对 Firestore SDK 有自己的依赖关系。因此,当您直接使用 Admin SDK 时,您可以访问由 Firestore SDK 创建的对象。但是,当你自己不声明依赖时,你自己的模块不能直接从中导入。
【讨论】:
我确实认为应该将包引用添加到 peerDependencies 部分(而不是 dependencies 部分)。否则在部署你的函数时,你会收到关于重复标识符的错误(因为 @google-cloud/firestore 库已经嵌入到 Firebase 库中)以上是关于Firebase 类型和具有默认 tslint.json 的无隐式依赖项的主要内容,如果未能解决你的问题,请参考以下文章
条件绑定的初始化程序必须具有可选类型,而不是“Bool”-firebase
TypeScript 上的 Firebase FCM:“脚本具有不受支持的 MIME 类型('text/html')