37
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TypeScriptにおけるClassとInterfaceの違い

Posted at

自分のAngularプロジェクトのコードを書いているときにふと、
「classとinterfaceの違いってなんだろう」と思いました。
わかるような気もするけど、言葉でちゃんと説明できないな…と思ったので自分用に調べてまとめてみました。

参考にしたのはこちら:
Classes vs Interfaces in TypeScript
TypeScriptのstaticアクセス修飾子を使う時理解する4つの事

#Class
 TypeScriptでは、ES6で正式にJSに導入されたClassを型チェックとstaticプロパティを用いてより強力に使うことができるものです。つまり、Classはトランスパイル後のコードにもそのまま残りますClassはオブジェクトを生成する設計図のようなもので、クラスプロパティを初期化し、メソッドを定義することで実装されます。Classのインスタンスを生成すると、利用できるメソッド・決められたプロパティを持ったオブジェクトが手に入るというわけです。
 Classにはstaticメソッドやstaticプロパティをもたせることができます。staticメソッドのすごいところは、インスタンスを作ることなくメソッドを利用できるところです。また、staticプロパティは同じClassから生成されたインスタンス間で共有されます。Class名.プロパティ/メソッド名で呼び出します。staticメソッドやプロパティを付与することでSingleton的に、そうでないものをもたせることでファクトリー的に利用することができます。

#Interface
 InterfaceはClassと異なり、TSでのみ存在する仮想構造です。TSコンパイラーが型チェックのためだけに利用するので、コンパイル後には残らず、もちろん利用されることはありません。Interfaceはただただオブジェクトが持つべきプロパティの名前と型を約束するだけのものです。

#まとめ(感想)
staticは使ったことがなかったので今回いろいろ調べてみて驚くことが多かったです。
個人的には、

  • Interfaceはとりあえず開発者が「typeをあるInterfaceに設定したものは必ずある名前である型のプロパティを持っている」と安心して作業を進められるようにするために機械的に設定するもの
  • クラスはインスタンスごとにイメージの想像がつくもの、持つ情報の集合体が1つの形をもつものでその形ごと受け渡しをしたい時に使うもの
    といったような印象でした。
    最終的に「イメージのつくもの」みたいな説明をしているのが「言葉で説明できる」というゴールを満たしているかは微妙なところですが、調べる前よりは自分の中でかなりクリアになったので今回は良しとしたいと思います。
37
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?