TypeScriptにおいて、interfaceはメソッドやプロパティを備える型、typeはプリミティブ型の延長的な型の定義に使う。
とはいえ、interfaceの大部分の機能をtypeも持っている。どちらを使うべきか迷うケースは少なくない。
公式ドキュメントによれば、プロジェクトの初期はとりあえずinterfaceを使い、各オブジェクトの役割が明確になってきたら、適宜typeを使うようにするのが無難とのことだ(意訳)。
interfaceとtypeの大きな違い
interfaceとtypeの大きな違いは、型定義後に変更ができるかどうかにある。
interfaceは、同名のインターフェースを定義すると自動で1つにまとめてくれる。
typeにはこうした機能がない。