簡體   English   中英

在 firebase 雲功能中具有 typescript 的 firebase-admin

[英]firebase-admin with typescript in firebase cloud functions

我在雲功能上使用 firebase 雲功能和 javascript。 而且,我想從 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。 有人可以告訴我們如何在雲功能上使用 typescript 和 firebase-admin 嗎?

https://firebase.google.com/support/release-notes/admin/node#4.1.3

您不需要安裝@types模塊,因為@types firebase-admin在框中附帶了 TypeScript 支持。 您應該可以通過安裝firebase-admin將它與 TypeScript 一起使用。

import * as admin from 'firebase-admin';

使用 ES6 模塊導入時似乎提供了類型:

  1. tsconfig.json
{
    "compilerOptions": {
        "resolveJsonModule": true,               // json imports
        "esModuleInterop": true,                 // import common modules as ES6 Modules
        "allowSyntheticDefaultImports": true,    // support typesystem compatibility
    }
}
  1. 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),
})

對於那些仍在苦苦掙扎的人,在安裝firebase -admin 后重新加載 VSCode對我有用

我知道我遲到了,但我找到了另一種方法來做到這一點,使用彼得給出的答案:

  1. 配置文件
{
    "compilerOptions": {
        "resolveJsonModule": true,               // json imports
        "esModuleInterop": true,                 // import common modules as ES6 Modules
        "allowSyntheticDefaultImports": true,    // support typesystem compatibility
    }
}
  1. 索引.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.
})

另一種選擇可能是這種方式。

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)
});
import * as admin from 'firebase-admin';
const serviceAccount = require('./firebase.json');

if (!admin.apps.length) {
  admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
  });
}

export const firebaseDB = admin.firestore();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM