Open1
【Firebase Cloud Functions】xxx is not a functionのエラーが出てメソッド実行できない
掲題について、クラスに用意したメソッドを実行したいだけなのですが、ログを見ると、
「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.
=============
処理は合っていると思われ、全く検討がつきません。
なにかご存知であれば、ご助言いただけると幸いです🙇