使用默认tslint.json的Firebase类型和无隐式依赖项

时间:2018-01-21 10:54:58

标签: typescript firebase google-cloud-firestore tslint

在阅读最新的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使用/导入类型的最佳做法是什么?

3 个答案:

答案 0 :(得分:5)

如果您希望能够从模块导入某些定义,则必须将该模块声明为依赖项。它们会显示在package.json下的functions文件中。如果您希望能够从@google-cloud/firestore导入,则需要添加依赖项:

npm install @google-cloud/firestore

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

答案 1 :(得分:2)

我同意接受的答案。

代替安装@google-cloud/firestore。您可以使用admin.firestore.QuerySnapshotadmin.firestore.DocumentSnapshot等...

这是更好的方法。您可以通过此访问所有内容。

答案 2 :(得分:0)

这是我的方法。不需要将'@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()});