firebase 云功能中带有 typescript 的 firebase-admin
Posted
技术标签:
【中文标题】firebase 云功能中带有 typescript 的 firebase-admin【英文标题】:firebase-admin with typescript in firebase cloud functions 【发布时间】:2017-10-28 10:54:36 【问题描述】:我在云函数上使用带有 javascript 的 firebase 云函数。 而且,我想从 javascript 切换到 typescript。
但是我不能在 typescript 上使用 firebase-admin,因为以下命令失败。
command: npm install @types/firebase-admin --save-dev
error: '@types/firebase-admin' is not in the npm registry.
根据此发行说明,firebase 管理员似乎支持打字稿。 有人可以告诉我们如何在云功能上使用 typescript 和 firebase-admin 吗?
https://firebase.google.com/support/release-notes/admin/node#4.1.3
【问题讨论】:
【参考方案1】:您不需要安装 @types
模块,因为 firebase-admin
附带了 TypeScript 支持。你应该可以通过安装 firebase-admin
来使用 TypeScript。
import * as admin from 'firebase-admin';
【讨论】:
【参考方案2】:使用 ES6 模块导入时似乎提供了类型:
tsconfig.json
"compilerOptions":
"resolveJsonModule": true, // json imports
"esModuleInterop": true, // import common modules as ES6 Modules
"allowSyntheticDefaultImports": true, // support typesystem compatibility
index.ts
import firebase from 'firebase-admin';
import serviceAccount from './service-account.json';
const params = //clone json object into new object to make typescript happy
type: serviceAccount.type,
projectId: serviceAccount.project_id,
privateKeyId: serviceAccount.private_key_id,
privateKey: serviceAccount.private_key,
clientEmail: serviceAccount.client_email,
clientId: serviceAccount.client_id,
authUri: serviceAccount.auth_uri,
tokenUri: serviceAccount.token_uri,
authProviderX509CertUrl: serviceAccount.auth_provider_x509_cert_url,
clientC509CertUrl: serviceAccount.client_x509_cert_url
firebase.initializeApp(
credential: firebase.credential.cert(params),
)
【讨论】:
const db = firebase.firestore()
的类型是什么?我似乎无法在任何地方找到适用于它的打字稿类型,我尝试了firebase.FirebaseFirestore
和许多其他方法都无济于事。
@NickSweeting 迟到总比不到好,但它将是firebase.firestore.Firestore
(来自导入)或FirebaseFirestore.Firestore
(全局类型)。【参考方案3】:
另一种选择可能是这种方式。
import * as admin from 'firebase-admin';
import * as serviceAccount from './service-account.json';
const firebaseAdmin = admin.initializeApp(
credential: admin.credential.cert(serviceAccount as admin.ServiceAccount)
);
【讨论】:
【参考方案4】:对于那些仍在苦苦挣扎的人,安装 firebase-admin 后重新加载 VSCode 为我完成了工作。
【讨论】:
ctrl+shift+p -> restart ts server
可能有同样的效果【参考方案5】:
我知道我迟到了,但我找到了另一种方法,使用彼得给出的答案:
-
tsconfig.json
"compilerOptions":
"resolveJsonModule": true, // json imports
"esModuleInterop": true, // import common modules as ES6 Modules
"allowSyntheticDefaultImports": true, // support typesystem compatibility
-
index.ts
import firebase from 'firebase-admin';
import serviceAccount from './service-account.json';
firebase.initializeApp(
credential: firebase.credential.cert(serviceAccount as any), //Cast as any instead of clone the JSON.
)
【讨论】:
不鼓励使用any
,而应使用as firebase.ServiceAccount
。但是,如果使用 Cloud Functions,甚至不需要手动指定服务帐户,只需调用 firebase.initializeApp()
。以上是关于firebase 云功能中带有 typescript 的 firebase-admin的主要内容,如果未能解决你的问题,请参考以下文章