プロを目指す人のためのTypeScript入門 安全なコードの書き方から高度な型の使い方まで (Software Design plus)
- 技術評論社 (2022年4月22日発売)


最近、TypeScriptを仕事で使うようになったので読んでみた。
ITエンジニア本大賞を受賞されたとのことだけど、それも納得。かなり充実した内容。
はじめにで、「教科書のように、時折基礎を振り返るために読み返され、長く使われるのが良い入門書です」と書かれてあったけど、まさにこの本はそうするのにピッタリな本だと思った。
JavaScriptを知らない人にたいしても読める内容になっていたけど、JavaScriptを知っていると思っている人にたいしても良い本だったように思う。文と式の話とか、TypeScriptではなく、JavaScriptについての話だけど、あまり意識したことがなかったのでいい勉強になった。
numberとBigIntについてもJavaScriptについての話だけど、勉強になった、BigIntには、NaNという概念がないのか(変換できない値はランタイムエラーとなるそう)。
他、注釈に小さく書かれてるだけだけど、ディープコピーには、structuredCloneという関数が使えるとかも覚えておきたいと思った。
時々、歴史的経緯を鑑みた結果での不完全ということが書いてあって気になった。例えば、普通のオブジェクトの引数を持つ関数に、readonlyプロパティを持つオブジェクトを渡すことができるから、結果的に関数内で書き換えられてしまうことがあるとか。
後方互換性に気を付けてるからとのことだけど、コンパイルが必要なTypeScriptだったらそこまで気にしなくてもいいような気がするんだけどなぁ。と思ったら、strictコンパイラオプションは例外なよう。歴史的経緯を鑑みた選択でも、チェックを厳しくするオプションというのは今後でてくるのかもしれない。
classについては、結構TypeScript独自の書き方があるのだなという印象。privateとかprotectedとか。ただ、クラス式だとprivateやprotectedは使えないそうだけど、何でそうしてるのだろう?
しかも、classだと、そのまま型としても使えるというのはかなり便利なように思う。
throwは何でも投げられるけど、Errorオブジェクトを投げるのがいいとのこと。それは分かるのだけど、「デバッグする人を困らせたいなどの特段の理由がない限りはErrorオブジェクトを投げましょう」と書かれてあって笑った。「デバッグする人を困らせたい」ってどういう状況なんだと(笑)
exactOptionalPropertyTypesという、オプショナルなプロパティに、undefinedを明示的に代入できないようにするという制約は、個人的にはいらないかなと思った。
これって、undefinedな可能性のある変数をセットしない場合はどうするのだろう。変数なら入れれるのかな。それだったら、有効にするのもありかもしれないと思ったのだけど。
今回、「あれ? そうだっけ?」と思ったのが、オプショナルチェーンについて。undefinedでもnullでも結果はundefinedになるらしい。つまり、「obj?.name」という式についてobjがnullだったとすると、結果はundefinedだそう。ここ、勘違いしてた…(てっきり、nullならnullになるのかと)。
ESModuleのデフォルトインポート/エクスポートについては、内部ではdefaultという名前が使用されているということを初めて知った。そうだったのか。
ちなみに、import宣言をするときは、TypeScriptだったとしても、拡張子は「.js」にしないといけないとのこと。Vue.jsの開発では拡張子を省略していいと聞いたけど、あれって標準の機能じゃなかったのかと驚いた。
その影響で、「import type {Animal, tama} from "./animal.js";」という記述があって、「気持ち悪!」と思った。TypeScript独特の型のインポートなのに、拡張子は「.js」という…。
とにかく、単純にJavaScriptに型をつけたものと説明されるTypeScriptだけど、こうやって勉強してみるとかなり奥深いことが分かった。今後、使いこなしていきたい。
- 感想投稿日 : 2023年5月22日
- 読了日 : 2023年5月22日
- 本棚登録日 : 2023年5月22日
みんなの感想をみる