TypeScriptでfirebase-admin sdkを使う

Node.jsだと公式ドキュメントの通り

const admin = require('firebase-admin');

var serviceAccount = require('path/to/serviceAccountKey.json');

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});

var db = admin.firestore()

で使えるのですが、TypeScriptだとちょっとやり方を変えないといけません。

事前にJSONファイルを読み込むのにtsconfig.tscompilerOptions.resolveJsonModuletrueにしておいて、

import * as firebase from 'firebase-admin'
import * as serviceAccount from '/path/to/firestore-service-account.json'

const params = {
  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),
})

でいけます。