Closed hayashi-ay closed 1 year ago
TypeScriptとエコシステム
ブラウザ、レンダリングエンジン、JavaScriptエンジン、ECMAScriptの関係図
この章は特筆すべきことはないがReact, Next, Vercel, Jest, React Testing Library, Prettier, ESLintについてかなり浅いがひと通り触れるのは良い。huskyについては鋭意執筆中みたい。
よく分かってない。
JavaScriptではプリミティブ型もオブジェクト型のように扱えるが、これはboxingという変換処理が自動で行われているため。これを自動ボックス化(auto-boxing)という。
関数宣言には巻き上げがあるが、関数式には巻き上げがない。
アロー関数は単なるシンタックスシュガーだと思っていたのですが、安全性のために従来の関数から引き算的に機能が取り除かれていることを知りました。
TypeScriptにはpythonにあるキーワード引数(keyword argument)やRuby、Scalaなどにある名前付き引数(named argument)などの機能はないが、Options Objectパターンを用いることで似たようなことが実現できる。
TypeScriptではクラスに1つでもパブリックでないプロパティがあると、そのクラスは構造的部分型ではなく公称型(nominal typing)になる。
宣言マージの活用例が紹介されていて参考になった。JavaScriptがアップデートされるたびに既存のクラスにメソッドなどが追加されることがあり、TypeScriptでもそれらに対応する必要があるが、そこで宣言マージが活用されている。バージョンごとにインターフェースを用意するのではなく、バージョンごとの差分だけをインターフェースに定義して、当該バージョンまでの型定義を読み込むことでインターフェースの宣言を繰り返さずに拡張することができる。
TypeScriptだけでなくJavaScriptにも触れていたり、TypeScriptのあらましの章ではTypeScriptを取り組むエコシステムやブラウザとレンダリングエンジン、JavaScriptエンジンの図があり分かりやすかったです。また歴史的な話も色々出典を参考にされて書かれていて面白かったです。一方で、はじめにの章にもあるが、「実務でTypeScriptを使うなら、ここだけはおさえておこう」「ここだけはおさえておけば、実務で死なない(=サバイバルできる)」という観点で書かれているので、理論には立ち入らず具体例だけで説明が終わっていたり、ところどころ説明が正確でなかったり不足していると感じました。プログラミングTypeScript -> サバイバルTypeScriptの順番に読んだが逆でも良かったかもしれないです。個人的にはJavaScriptの経験がある程度ある上で時間が取れてしっかり理解したい人にはプログラミングTypeScriptの方がおすすめです。とはいえ本書はOSSで公開されていて誰でも執筆に参加できるので今後に期待です。
https://typescriptbook.jp/