インターフェース
インターフェース(Interfaces)
インターフェースは、JavaScriptランタイム上では、何の影響もありません。TypeScriptのインターフェースは、オブジェクトの構造を宣言するための多くの機能があります。
次の2つは同じ意味の宣言です。1つ目は、インラインの型定義を使用し、2つ目はインターフェースを使用しています。
しかし、_サンプル B_の美しいところは、myPoint
このライブラリを使って、別のライブラリを作る誰かが、新しいプロパティを追加する際に、簡単にmyPoint
の宣言を拡張して、新しいプロパティを追加できることです:
これは、TypeScriptのインターフェースが拡張に対してオープンであるためです。これはTypeScriptの重要な教えです。_インターフェース_は、JavaScriptの拡張性と同じことを実現しています。
クラスはインターフェースを実装できる
誰かがあなたのためにinterface
で宣言したオブジェクト構造に従わなければならない_クラス_を使いたい場合、互換性を保証するためにimplements
キーワードを使うことができます:
基本的にimplements
したクラスがあるときに、その外部のPoint
インターフェースを変更すると、あなたのコードベースでコンパイルエラーになりますので、簡単に同期を取ることができます:
implements
はクラスの_インスタンス_の構造を制限することに注意してください。
foo:Point = MyPoint
のようなものは上記とは異なります。
ヒント
すべてのインターフェースが簡単に実装できるとは限りません
インターフェースは、JavaScriptで可能などんな変な構造でも宣言できるように設計されています。
new
をコールできる何かのインターフェースを考えてみましょう:
基本的な実装は次のようなものです:
インターフェースを使って変な構造を宣言し、TypeScriptの型のサポートを得つつ、安全に使用することもできます。しかし、それらをTypeScriptのクラスとして実装できるとは限りません。
最終更新