Sobes.tech
Назад к вопросам
Middle
1

В чём разница между интерфейсом и абстрактным классом в TypeScript?

Компании, где спрашивали
X-Notes

Ответ от нейросети

sobes.tech AI

В TypeScript интерфейс (interface) и абстрактный класс (abstract class) служат для описания структуры объектов, но имеют ключевые отличия:

  • Интерфейс описывает только форму объекта: какие свойства и методы должны быть реализованы. Он не содержит реализации методов и не может содержать состояние (переменные с конкретными значениями).
  • Абстрактный класс может содержать как объявления методов без реализации (абстрактные методы), так и методы с реализацией. Также он может содержать поля с состоянием.

Пример:

interface IAnimal {
  name: string;
  makeSound(): void;
}

abstract class Animal {
  constructor(public name: string) {}
  abstract makeSound(): void;
  move() {
    console.log(`${this.name} движется`);
  }
}

class Dog extends Animal implements IAnimal {
  makeSound() {
    console.log('Гав');
  }
}

Таким образом, интерфейс — это контракт без реализации, а абстрактный класс — базовый класс с частичной реализацией и возможностью хранить состояние. Интерфейсы поддерживают множественное наследование, а классы — только одиночное.