【问题标题】:firebase-admin with typescript in firebase cloud functionsfirebase 云功能中带有 typescript 的 firebase-admin
【发布时间】: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

【问题讨论】:

    标签: typescript firebase google-cloud-functions firebase-admin


    【解决方案1】:

    您不需要安装 @types 模块,因为 firebase-admin 附带了 TypeScript 支持。你应该可以通过安装 firebase-admin 来使用 TypeScript。

    import * as admin from 'firebase-admin';
    

    【讨论】:

      【解决方案2】:

      使用 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),
      })
      

      【讨论】:

      • 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】:

        我知道我迟到了,但我找到了另一种方法,使用彼得给出的答案:

        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';
        
        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()
        猜你喜欢
        • 1970-01-01
        • 2018-04-11
        • 1970-01-01
        • 2020-06-09
        • 2020-11-24
        • 1970-01-01
        • 2021-01-12
        • 2017-12-13
        • 2018-11-29
        相关资源
        最近更新 更多