TypeScriptでコンパイルしやすいコードについて書いてみる
公式のwikiをまとめてみる
コンパイルしやすいコードをかく
intersection型よりもinterfaceを優先する
interface
単一のプロパティのコンフリクトを検出するフラットオブジェクトを作成する。
これはプロパティの競合を解決する上で重要
一貫して型が表示される
interfaceの関係はキャッシュされる
type
再起的に全てのプロパティをマージするだけ、neverを生成する場合がある
型が一部しか表示されない
effecteive、flattend typeの照合前に、全ての構成要素がチェックされる
これらの違いを理解して、interfaceをよく使う方が良い
型アノテーションを使用
型の注釈、特に戻り値の方を追加するとコンパイラの作業を大幅に節約できる。
型推論は便利なので全てに記載する必要はないが、明記することで、ファイルの読み取り・書き込みにかかる時間を節約することができる。
実際にimportを使用して、--declationを使用してコンパイルしたファイルを確認するとよくわかる。
型をそれぞれに参照するので、大規模プロジェクトだとパフォーマンスに影響が出そう。
ユニオン型よりも基本型を使う
UnionTypeは便利だが、型をチェックするときあり得る方をそれぞれ比較する
12を超えるとパフォーマンスに影響が出るかもしれない
全てをunion型にしてそれぞれを分けて記載するよりもsubtypeを使用すると良い
複合型には型エイリアスを使用して命名すること
TSはコンディショナルタイプをそのまま再実行してしまう
型エイリアスで命名して、呼び出すことで再実行を防ぎ、キャッシュされるようになる。