hayashi-ay / booklist

1 stars 0 forks source link

サバイバルTypeScript #13

Closed hayashi-ay closed 1 year ago

hayashi-ay commented 1 year ago

https://typescriptbook.jp/

hayashi-ay commented 1 year ago

TypeScriptのあらまし

TypeScriptとエコシステム

TypeScriptとエコシステム

ECMAScript

ブラウザ、レンダリングエンジン、JavaScriptエンジン、ECMAScriptの関係図

hayashi-ay commented 1 year ago

作って学ぶTypeScript

この章は特筆すべきことはないがReact, Next, Vercel, Jest, React Testing Library, Prettier, ESLintについてかなり浅いがひと通り触れるのは良い。huskyについては鋭意執筆中みたい。

hayashi-ay commented 1 year ago

読んで学ぶTypeScript

シンボル型 (symbol type)

よく分かってない。

ボックス化 (boxing)

JavaScriptではプリミティブ型もオブジェクト型のように扱えるが、これはboxingという変換処理が自動で行われているため。これを自動ボックス化(auto-boxing)という。

関数宣言と巻き上げ (hoisting)

関数宣言には巻き上げがあるが、関数式には巻き上げがない。

従来の関数とアロー関数の違い

アロー関数は単なるシンタックスシュガーだと思っていたのですが、安全性のために従来の関数から引き算的に機能が取り除かれていることを知りました。

キーワード引数とOptions Objectパターン

TypeScriptにはpythonにあるキーワード引数(keyword argument)やRuby、Scalaなどにある名前付き引数(named argument)などの機能はないが、Options Objectパターンを用いることで似たようなことが実現できる。

公称型クラス

TypeScriptではクラスに1つでもパブリックでないプロパティがあると、そのクラスは構造的部分型ではなく公称型(nominal typing)になる。

オープンエンドと宣言マージ (open-ended and declaration merging)

宣言マージの活用例が紹介されていて参考になった。JavaScriptがアップデートされるたびに既存のクラスにメソッドなどが追加されることがあり、TypeScriptでもそれらに対応する必要があるが、そこで宣言マージが活用されている。バージョンごとにインターフェースを用意するのではなく、バージョンごとの差分だけをインターフェースに定義して、当該バージョンまでの型定義を読み込むことでインターフェースの宣言を繰り返さずに拡張することができる。

hayashi-ay commented 1 year ago

Tips

hayashi-ay commented 1 year ago

その他

hayashi-ay commented 1 year ago

TypeScriptだけでなくJavaScriptにも触れていたり、TypeScriptのあらましの章ではTypeScriptを取り組むエコシステムやブラウザとレンダリングエンジン、JavaScriptエンジンの図があり分かりやすかったです。また歴史的な話も色々出典を参考にされて書かれていて面白かったです。一方で、はじめにの章にもあるが、「実務でTypeScriptを使うなら、ここだけはおさえておこう」「ここだけはおさえておけば、実務で死なない(=サバイバルできる)」という観点で書かれているので、理論には立ち入らず具体例だけで説明が終わっていたり、ところどころ説明が正確でなかったり不足していると感じました。プログラミングTypeScript -> サバイバルTypeScriptの順番に読んだが逆でも良かったかもしれないです。個人的にはJavaScriptの経験がある程度ある上で時間が取れてしっかり理解したい人にはプログラミングTypeScriptの方がおすすめです。とはいえ本書はOSSで公開されていて誰でも執筆に参加できるので今後に期待です。