気づいたきっかけは下の記事。
interfaceとtypeの違い、そして何を使うべきかについて
昔の仕様
以前のtype
は、「新しい名前を作らない」という仕様があった。
たとえば、コンパイルエラーの出力には元の型名が表示されていた。
Type aliases don’t create a new name — for instance, error messages won’t use the alias name.
(https://medium.com/@martin_hotell/interface-vs-type-alias-in-typescript-2-7-2a8f1777af4c)
他にもtype
はextends/implementsできないという仕様もあったりして、なかなかに使いにくかった。
そのような状況だったので、基本的にはinterface
を使い、それでは表せない型にだけtype
を使っていた。
今はもうほとんど差がなくなっていたなんて…
今後の方針
interface
は同じ名前で複数回定義して拡張できるという仕様があるけど、これいる…?
最初に紹介した記事にも書かれている通り、混乱のもとにしかならない気がする。
これからは表現力の高いtype
をメインに使っていきたい。