Назад к вопросам
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('Гав');
}
}
Таким образом, интерфейс — это контракт без реализации, а абстрактный класс — базовый класс с частичной реализацией и возможностью хранить состояние. Интерфейсы поддерживают множественное наследование, а классы — только одиночное.