book
book copied to clipboard
interfaceとabstract classの違いを説明しませんか?
想定質問
interfaceとabstract classの違いは何ですか?
回答
共通点
- どちらもシグネチャだけを定義でき、子クラスにその実装を強制できる
相違点
- インターフェイスはコンパイル時に消えるが、抽象クラスは空のclassにコンパイルされて残る
// ts
interface Foo {}
// js
// ts
abstract class Foo {}
// js
class Foo {}
- この違いにより、抽象クラスは
instanceof
のオペランドに用いることができる
// ts
abstract class Animal {}
class Dog extends Animal {}
console.log(new Dog() instanceof Animal); // OK
加筆する場所
https://typescriptbook.jp/reference/object-oriented/class/abstract-class