0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【TypeScript】Interfaceについてメモ(更新中)

Posted at

概要

typescriptのinterfaceについてよくわからなかったので調べてみる。

interfaceとは?

interfaceとは、クラスが実装すべきフィールドやメソッドを定義した型。
クラスはインターフェースを実装することで、型のルールを作れて、チェックが可能になる。

JavaやPHPなどで使われているが、JavaScriptにはないため、TypeScriptで可能となった。

TypeScriptでのインターフェースの役割はコンパイル時の型チェックであり、JavaScript実行時には影響がない。

名前的型付けと構造的型付け

型の区別や互換性の判定をする型システムには以下二つが存在

型付け 概要
名前的型付け 型の名前に基づいて型の区別を行う。
構造的型付け 型の構造に基づいて型の区別や互換性を判定する。

名前的型付け

型の名前に基づいて型の区別を行うシステム。
string型とnumber型は名前が異なるため、異なる方として扱われる。
クラスPerson型とDog型も同様に名前が異なるため、異なる方として扱われ、互換性もないものと判断される。

Java, PHP, C#, Swift等で採用されている。

構造的型付け

型の名前ではなく、その構造に注目して区別、互換性の判定がされる。
この方法では、型が持つプロパティやメソッドの構造が同一であれば、名前が異なっている型同士でも互換性があるものとみなされる。

以下PersonクラスとDogクラスでは、共にwalkメソッドを1つ持っているという同一の構造となっている。
この場合、PersonDogは互換性があるものとして判定される。

class Person {
  walk() {}
}
 
class Dog {
  walk() {}
}

まとめ

名前的型付け 構造的型付け
型の区別基準 型の名前 型の構造
互換性の判定 名前が同じであれば互換性あり 構造が同じであれば互換性あり
主な採用言語 Java, C#, Swift, PHPなど TypeScript, Goなど
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?