Ответ
Плюсы:
- Четкое разделение контракта и реализации
- Легче тестировать (можно мокать интерфейсы)
- Упрощает поддержку кода (меньше связности)
- Позволяет реализовывать полиморфизм
Минусы:
- Добавляет абстракцию (может усложнить код)
- Требует дополнительного времени на проектирование
- В JS/TS нет проверки на этапе компиляции, что класс реализует все методы интерфейса
interface Animal {
makeSound(): void;
}
class Dog implements Animal {
makeSound() {
console.log('Woof!');
}
}
class Cat implements Animal {
makeSound() {
console.log('Meow!');
}
}