TL;DR
- TypeScript を使えば、実行環境に関係なくモダンな JavaScript の構文を使える。
- その利点を活かし、TypeScript で使えるようになる新しい言語機能を積極的に使う。
内容
モダンな JavaScript の例
import / export: ES2015 より前の JavaScript には、コードをモジュールに分ける標準の方法がなかった。そのため、複数の <script> タグ、手作業での連結、Makefile、Node.js の require、AMD の define コールバックなど、さまざまな方法が使われていた。TypeScript にも独自のモジュールの書き方があった(項目72)。今は ES モジュールの import / export が一般的なので、それを使う。
クラス: JavaScript はプロトタイプベースの言語だが、ES2015 でクラス構文が追加された。プロトタイプを直接使っているコードは、クラスに書き換える。
const / let: var はスコープのルールが特殊なので使わない。
for-of と map: C スタイルの for ループは、ループの外では不要なインデックス変数を持ち込むので間違えやすく、Iterable 型もうまく使えない(項目17)。
async / await: コールバックや Promise を直接使わず、async / await を使う(項目27)。
アロー関数: 関数式より簡潔で、this の値を保持するので、関数式より優先して使う。
デフォルト引数: TypeScript では、デフォルト値から型が推論される。
オブジェクトリテラルの省略記法と分割代入: 変数の命名に一貫性が出る。配列から値を取り出すこともできる。
Map / Set: JavaScript のオブジェクトを連想配列として使うことで起きる多くの問題を避けられる。
オプショナルチェーン演算子(?.): 便利だが、そもそも null を避けるほうがよい(項目33、項目37)。
Null 合体演算子(??): || は 0 や '' のような falsy な値でもデフォルト値を返してしまい、バグにつながるので避ける。
use strict: TypeScript は Strict モードよりもさらに厳格であり、生成する JavaScript には use strict が含まれるので、TypeScript で use strict を書いても意味はない。
新しい機能を追いかける
新しい機能は TC39 のプロポーザルの一覧で追いかけられる。TypeScript の開発チームは、標準化プロセスのステージ 3 に達した機能の実装にコミットしているので、新しい機能は比較的すぐに使えるようになる。追いかけておくと、TypeScript を書くのにも役立つ。
本書は、TypeScript に大きな影響を与えうるプロポーザルとして Records & Tuples を挙げている。ただし、このプロポーザルは Composites に統合される形で取り下げられた。
キーワード
- TypeScript
- JavaScript
- ES モジュール
- Node.js
- 型推論
- 分割代入
- TC39
自分の理解
いま注目しているプロポーザルは、ステージ 2 の Pipeline Operator である。