Abstract classes, interfaces and types
Abstract classes
Абстрактные классы представляют классы, определенные с ключевым словом abstract. Создать объект абстрактного класса напрямую нельзя. Как правило абстрактные классы описывают сущности, которые в реальности не имеют конкретного воплощения
Interfaces
Интерфейс определяет свойства и методы, которые объект должен реализовать. Определяются ключевым свойством interface.
Интерфейсы могут быть реализованы не только объектами, но и классами. Для этого используем ключевое свойство implements. Интерфейс может содержать свойства только для чтения, значение которых нельзя менять (определяем свойства с помощью ключевого свойства readonly)
Расширение интерфейса
TypeScript позволяет добавлять в интерфейс новые поля и методы, просто объявив интерфейс с тем же именем и определив в нем необходимые поля и методы. Например:
Отличия интерфейсов и абстрактных классов
Интерфейсы описывают только часть функциональности объекта (определенные признаки). Абстрактный класс описывает целую категорию разных объектов, а его характеристики наследуют только те объекты, которые являются частью это категории. Например: коты и собаки — животные (абстрактный класс), а умение бегать — способность (интерфейс)
Интерфейс описывает только поведение — методы и поля
Наследник абстрактного класса обязан наследовать все его составляющие, а интерфейс создан только для реализации (имплементирования)
Type
Позволяет определять псевдонимы типов с помощью ключевого слова type
Псевдонимы могут заимствовать и расширять код других:
Отличия Type от Interface
interface для объектов, а type для различных типов. Если говорить про использование этих сущностей для объектов, то они взаимозаменяемы. Если говорить не об объектах, то для них мы должны использовать type:
Интерфейсы можно имплементировать, типы нельзя
Псевдонимы типов
type не умеет в слияние в тип с одним значением, а интерфейсы умеют
Типы могут в объединение (
|
) и в пересечение (&
), а интерфейсы не умеют
Last updated