Skip to content

TypeScriptにおけるtypeとinterfaceの違い

TypeScriptで型を定義する場合、大きく2つの方法がある。

type User = {
name: string;
}
interface User {
name: string;
}

ほとんど同じにみえるけど、意味論としては異なるらしい。

  • type: 型エイリアスを定義する
  • interface: 新しい型を定義する

type は型エイリアスなのでIDE等でホバーしたときの表現はすべて定義が展開されたものになるけど、interface では新しい型を定義するので名前だけが見える状態になる。

機能としては、type はユニオン型を定義できるがパフォーマンスは interface と比べて悪い。

type UserType = 'guest' | 'readonly' | 'readwrite';

反対に interface は効率がいいけれど、型のマージなどバグの原因となる挙動がいくつかある。

interface User {
name: string;
}
interface User {
avatarUrl: string;
}

両方読んだけれど、普段は type でいいかなとは思った。tsgo で多少マシになるんじゃないか。