intermediate
Abstract classes и interfaces
Выбирайте interfaces для pure structural contracts и abstract classes, когда shared implementation или protected template methods являются частью design.
Интерфейсы — структурный контракт без реализации, удобны для ports и множественного «наследования» формы. Абстрактные классы дают общую реализацию и protected template methods — когда подклассы реально расширяют семейный алгоритм.
В TypeScript доступны оба; interfaces для public API, abstract classes при нужде в общем коде — не для каждой иерархии.
На интервью: interface vs abstract class для `NotificationChannel` с email и SMS.
Типовые ошибки: abstract class как свалка; неудобное сочетание implements и extends; путаница при смешении парадигм.
Компромисс — гибкая structural typing (interfaces) против переиспользуемого base code (abstract classes).
Чеклист:
- Interface для чистого контракта.
- Abstract class для скелета алгоритма.
- Без глубоких abstract иерархий.