0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Mongoose / TypeScript】JSからTSへの移行苦戦録もとい参考サイト集

Last updated at Posted at 2024-09-11

状況と概要

ガバガバJSで開発を続けることに違和感を感じたので、TSに乗り換えてみようと思って既存のスクリプトを修正しようとしたときにぶち当たった壁のことをお話しします。

1. 実行環境の設定を変更

すばらしきサイト様です。

2. Mongoose関連

JSからの移行で一番苦しいのが厳しくなった「データ型」問題ですが…。

スキーマちゃん、モデルちゃん問題

JSでMongooseのスキーマやモデルを作るときは{}(オブジェクトこと連想配列)を使っておけば万事が解決してました。特に、クエリを実行したときの戻り値やコールバックにとる引数のことですね。
でもTSはそんなガバガバを看過しないので、Mongoose本来のデータ構造であるDocumentクラスを継承したインターフェイスを使うことで、安全に弄りまわせるということらしいです。

クエリちゃん問題

Mongooseを使って接続したMongoDBから情報を取得するにはクエリを実行しますが、TSにしたとたんその非同期処理の挙動が変わったのです。取得した結果のプロパティがundefined地獄になりました。
そんな私の2時間の悩みを救ったのがこちら。

特に感動したのがこれら。

  • routerのメソッドで非同期処理を使いたいときはコールバックをasyncにすればいい
  • find()の実行結果は一度lean()でJSオブジェクトに変換する

3. セッション

TSにはC#の拡張メソッド的なノリで後から定義を追加できるdeclareとかいうものがあるらしいです。
チートだなぁ、そうに決まってる

まとめ

界隈の外人ニキネキも邦人ニキネキも天才だなと思いました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?