LEFログ:学習記録ノート

leflog: 学習の記録をどんどんアップしていきます

【感想】『初めてのTypeScript』―― TypeScriptの全体像を学べる本

まとめ

  • TypeScriptについて全体像を掴める
    • 網羅的でありがたい
  • コード例が多い
  • 訳が親切で読みやすい
  • JavaScriptに関する知識は必要
    • JSPrimerを読んでおけば大丈夫

感想

タイトル通りの感想になりますが、TypeScriptの全体像を学べる本で良かったです。

特に最近だとnode-sqlite3のコードを書いたのですが、その際にも参考になりました。

lef237/node-sqlite3-practice: node-sqlite3によるコールバック、Promise、async/await

単純な文法のみではなく、「.d.tsとは何ぞや?」という宣言ファイルについても解説されていて良かったです。

プロジェクトの設定(構成オプション)についても詳しく記述されています。最近知ったimport typeについても書いてありました。

コードの数も多く、それらの難易度もちょうど良かったと思います。

訳者さんの注釈によって理解が深まる箇所もありました。とてもありがたいです。

難易度について

難易度的には、「JavaScript Primerの内容を一通り理解しているくらい」がちょうど良いと思います。

TypeScriptに関しては網羅的ですが、JavaScriptに関する説明は少ないです。TypeScript特有の文法や仕様を解説した本になっています。

そのため、JavaScriptに自信がない場合は、まずは『JavaScript Primer』を読むことをオススメします。

JavaScript Primer - 迷わないための入門書 #jsprimer

14.3のenumについて:インデックスアクセス型

14.3にこのようなコードが出てきます。

const StatusCodes = {
    InternalServerError: 500,
    NotFound: 404,
    Ok: 200,
} as const;

// 型:200 | 404 | 500
type StatusCodeValue = (typeof StatusCodes)[keyof typeof StatusCodes];

この(typeof StatusCodes)[keyof typeof StatusCodes]が唐突に出てきてどう読めばよいのか分からなかったのですが、これはインデックスアクセス型を用いているようです。

インデックスアクセス型 (indexed access types) | TypeScript入門『サバイバルTypeScript』

インデックスアクセス型については本書には記述が無かった気がするので、理解するのに少し時間が掛かりました。*1

難しい型定義の場合にはコメントで補足をつけたほうが良さそう

複雑な型定義がされているコードを読み解くのは時間が掛かります。

そのため、複雑な型定義をする場合には、併せてコメントも残したほうが良さそうな気がしました(保守性を上げるため)。

本書においては、「15.5 型演算と複雑さ」で次のように述べられていました。

それでも、型演算を使う必要性を感じた場合は――将来の自分自身も含めて、コードを読む開発者のために――それらの使用を最小限に抑えるように心がけてください。コードの読み手が理解しやすいように、読みやすい名前を使用してください。将来の読み手が悩む可能性があると思われるすべてのものに、説明的なコメントを残すようにしてください。(P.291)

TypeScriptを使う場合には、リーダブルな型注釈を書くように心掛けたいと思いました。

*1:自分が見落としているだけかもしれません