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 иерархий.