typeはエイリアスであり、いろんな型を表すことができる
type A = number type B = number | string type C = { name: string age: number }
interfaceはnumberとかnumber | stringのエイリアスは作れない
type A = number // error type B = number | string // error interface C { // ok name: string age: number }
typeはオブジェクト型の交差には &
を使用する
type A = { name: string; }; type B = { age: number; }; type Profile = A & B; const profile: Profile = { name: 'name', age: 23, };
interfaceはextendsで拡張する
interface A { name: string; } interface Profile extends A { age: number; } const profile: Profile = { name: 'name', age: 23, };
interfaceは宣言のマージができる。
マージされたすべてのプロパティに従わなければいけない
interface Profile { name: string; age: number; } interface Profile { sex: string; } const user: Profile = { name: 'name', age: 23, sex: 'men', };
typeは宣言のマージはできない
// error type Profile = { name: string; age: number; }; type Profile = { sex: string; };