状況と概要
ガバガバ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
とかいうものがあるらしいです。
チートだなぁ、そうに決まってる
まとめ
界隈の外人ニキネキも邦人ニキネキも天才だなと思いました。