TypeScript: interface vs type

2021-07-05

よく出てきそうな話題なのでメモ。

公式のドキュメントにあった。
https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#differences-between-type-aliases-and-interfaces

capture.png

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 を使っていこうと思います。

2024-10-02 追記

よくまとまっていたのでメモ。

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
// }