2021-07-05
よく出てきそうな話題なのでメモ。
公式のドキュメントにあった。
https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#differences-between-type-aliases-and-interfaces

Type aliases and interfaces are very similar, and in many cases you can choose between them freely.
ほとんど同じで、多くのケースでは自由に選んでいいよ、だってさ〜。
If you would like a heuristic, use interface until you need to use features from type.
判断基準がほしいなら type の必要があるまで interface 使ってね、とのことなので私は interface を使っていこうと思います。
よくまとまっていたのでメモ。
typeとinterfaceって結局どう使い分ければ良いの?
どっちを使うべきかの判断基準も書かれていたけど、多くの場合はどちらでも良い、みたいな傾向になるかな〜。
ライブラリとかを作る場合は interface を使うことを基準に考えたほうが良いかも、と思った。
「豆知識: 型定義を分かりやすくするPrettify」にあった以下の Tips は便利そう。
(ただ、これを使わなくても、TypeScript 側でより分かりやすく見せてくれると良いのにな、とは思った)
type Prettify<T> = {
[K in keyof T]: T[K];
} & {};
type Name = {
name: string;
};
type Age = {
age: number;
}
type User = Name & Age
type PrettifiedUser = Prettify<User>
// type PrettifiedUser = {
// name: string;
// age: number
// }
type を使う場合に深刻なパフォーマンス問題が発生し、interface を使うことで解消する、という事例が出てきました。
【結論】TypeScriptの型定義はtypeよりinterfaceを使うべき理由
それまで1分程度で完了していたtscによる型チェックが、突然30分以上かかるようになったのです。
記事内で結論付けられているこちらの記述に私も賛成です。
オブジェクトの形状を定義する際は、まず
interfaceを使う。interfaceで表現できない型(Union型など)を定義する必要がある場合に限り、typeを使う。