Open1

【Firebase Cloud Functions】xxx is not a functionのエラーが出てメソッド実行できない

mamoru_takamimamoru_takami

掲題について、クラスに用意したメソッドを実行したいだけなのですが、ログを見ると、
TypeError: memoryBook.increaseReadCnt is not a function」と表示されてしまい、処理が成功しません😭

問題の箇所

readBooksというコレクションへのドキュメント追加をトリガーに実行する処理です。


  ~(省略)~

  const readBook = snapshot.data() as ReadBook;

  const memoryBook = await memoryBooksFirestoreGateway.fetch(
    memoryBookId
  );

  // memoryBookがなければ新規追加
  // あれば、memoryBooks-readCnt~~をインクリメント
  const newMemoryBook =
    memoryBook == null
      ? MemoryBook.createFromReadBook(readBook)
      : memoryBook.increaseReadCnt();  // ←ココでエラー発生!!
  // ↓ staticメソッドだとうまくいく
  // : MemoryBook.increaseReadCnt(readBook, memoryBook);

MemoryBooksというコレクションのドキュメントをfetchしてきて、該当ドキュメントがあれば、increaseReadCnt() でインクリメントするような処理をしたいだけなのですが、うまくいきません。

immutable設計ということで、オブジェクトの再生成をして、newMemoryBookに更新したオブジェクトを設定しています。

エラー内容から、関数だと認識されていない??

ちなみに不本意ですが、staticメソッドにすると関数だと認識されるのか(当たり前ですが)、処理が成功します。


export class MemoryBook {

  ~(省略)~

  // 読んだ回数をインクリメント
  increaseReadCnt(): MemoryBook {
    return new MemoryBook(
      this.title,
      this.author,
      this.affiliateUrl,
      this.isbn,
      this.itemUrl,
      this.largeImageUrl,
      this.smallImageUrl,
      this.readCntTotal + 1,
      this.readCntWeekly + 1,
      this.readCntMonthly + 1,
      this.readCntYearly + 1,
      this.isFavourite
    );
  }

  // ↓こっちだとうまくいく
    static increaseReadCnt(
    readBook: ReadBook,
    memoryBook: MemoryBook
  ): MemoryBook {
    return new MemoryBook(
      readBook.title,
      readBook.author,
      readBook.affiliateUrl,
      readBook.isbn,
      readBook.itemUrl,
      readBook.largeImageUrl,
      readBook.smallImageUrl,
      memoryBook.readCntTotal + 1,
      memoryBook.readCntWeekly + 1,
      memoryBook.readCntMonthly + 1,
      memoryBook.readCntYearly + 1,
      false
    );
  }
}

主環境

    "eslint": "^7.32.0",
    "firebase": "^9.13.0",
    "typescript": "^4.8.4",

思い当たる点

1. jsに変換されるときにおかしくなっている??

2. eslintでサポートするTypeScriptのバージョン範囲外のようで以下の警告が出ている。

=============

WARNING: You are currently running a version of TypeScript which is not officially supported by @typescript-eslint/typescript-estree.

You may find that it works just fine, or you may not.

SUPPORTED TYPESCRIPT VERSIONS: >=3.3.1 <4.1.0

YOUR TYPESCRIPT VERSION: 4.8.4

Please only submit bug reports when using the officially supported version.

=============

処理は合っていると思われ、全く検討がつきません。
なにかご存知であれば、ご助言いただけると幸いです🙇