TypeScriptにおけるtypeとinterfaceの違い
TypeScriptで型を定義する場合、大きく2つの方法がある。
type User = { name: string;}
interface User { name: string;}ほとんど同じにみえるけど、意味論としては異なるらしい。
- type: 型エイリアスを定義する
- interface: 新しい型を定義する
type は型エイリアスなのでIDE等でホバーしたときの表現はすべて定義が展開されたものになるけど、interface では新しい型を定義するので名前だけが見える状態になる。
機能としての違い
Section titled “機能としての違い”機能としては、type はユニオン型を定義できるがパフォーマンスは interface と比べて悪い。
type UserType = 'guest' | 'readonly' | 'readwrite';反対に interface は効率がいいけれど、型のマージなどバグの原因となる挙動がいくつかある。
interface User { name: string;}
interface User { avatarUrl: string;}どちらを使うべきか
Section titled “どちらを使うべきか”両方読んだけれど、普段は type でいいかなとは思った。tsgo で多少マシになるんじゃないか。