Open1
TypeScriptメモ
interfaceとtypeと、どっち使うか問題
【参考】
- interfaceとtypeの違い、そして何を使うべきかについて
- TypeScript で type と interface どっち使うのか問題
- Preferring Interfaces Over Intersections
【メモ書き】
- interface では Declaration merging がされる。type ではされない
- 同じ名前の型定義が複数ある時に、自動的に一つの定義にマージしてくれる機能
- たまたまグローバルに定義されている型と同じ名前をつけてしまうと、拡張される
- type では union 型や tuple 型が作れる。interface では作れない
- interface で定義したものは index signature で定義したオブジェクトに代入できない
- Index signature is missing in type 'TestObjectInterface'.ts(2345)
-
function test(obj: {[key: string]: string}): void;
- このとき引数objに、typeで型を指定したオブジェクトは入れられるが、interfaceではできない
- 実際には
{[key: string]: string}
以外も代入できてしまうので、interfaceのほうが堅牢
TS初期はinterfaceではできてtypeはできないことが割とあったのでinterface派が多かった。
バージョンアップしてるうちにtypeでできることがどんどん増えて、今は差がほとんどない。
interfaceのほうが堅牢だが、typeは安全性を犠牲にして便利さをとっている印象。
Object型を定義したり、ライブラリ開発者が外部に公開するには、interfaceのほうが歓迎される。
(拡張しやすいため)