メインコンテンツまでスキップ

インターフェース (interface)

インターフェースはクラスが実装すべきフィールドやメソッドを定義した型です。クラスはインターフェースを実装することで、インターフェースが求めるメソッド名や引数の型に則っているかをチェックすることができます。

JavaやPHPなどの言語では、インターフェースが定義できますが、JavaScriptにはそれに相当する構文がありません。一方、TypeScriptにはインターフェースがあります。

TypeScriptで定義されたインターフェースは、コンパイルチェックに活用された後、JavaScriptコードを生成する過程で消されるため、インターフェースがJavaScript実行時に影響することはありません。

インターフェースを定義する

TypeScriptではinterfaceキーワードでインターフェースを定義できます。

ts
interface SomeInterface {
method1(): void;
method2(arg: string): void;
}
ts
interface SomeInterface {
method1(): void;
method2(arg: string): void;
}

TypeScriptではメソッドだけでなく、パブリックフィールドも定義できます。

ts
interface SomeInterface {
field: string;
}
ts
interface SomeInterface {
field: string;
}

インターフェースと構造的部分型

Javaなどのオブジェクト指向言語ではクラスの抽象的な型定義として利用されます。そのため、インターフェース単体では利用されず、特定のクラスがインターフェースを継承し実装を追加することで初めて効果を発揮します。

TypeScriptでもインターフェースをクラスに実装させることはできますが、それに加えて、TypeScriptは構造的部分型なので、インターフェースと実装関係がないオブジェクトの型注釈としても利用できます。

ts
interface Person {
name: string;
age: number;
}
 
const taro: Person = {
name: "太郎",
age: 12,
};
ts
interface Person {
name: string;
age: number;
}
 
const taro: Person = {
name: "太郎",
age: 12,
};

📄️ 構造的型付け

プログラミング言語にとって、型システムは大事なトピックです。型システムとは、プログラム内のさまざまな値や変数に「型」を割り当てる決まりを指します。この決まりによってデータの性質や扱い方が決まります。特に、どのように型と型を区別するのか、逆に、どのように型同士が互換性ありと判断するかは、言語の使いやすさや安全性に直結するテーマです。