Продвинутый Typescript
2026-02-26 18:32 Diff

В этом уроке мы разберем наследование. Это механизм, который позволяет создавать подклассы на основе уже существующих классов. Подклассы наследуют свойства и методы родительского класса и могут расширять их.

В TypeScript наследование реализуется с помощью ключевого слова extends:

Наследоваться можно только от одного класса. Но цепочка наследования может быть бесконечной. Например, класс ImageCustomFile наследуется от класса CustomFile, который может наследоваться от другого класса и так далее.

Вся цепочка наследования образует иерархию классов. Так происходит, потому что классы могут использоваться и как типы — иерархия классов полностью совпадает с иерархией типов. Подкласс является подтипом базового класса и может использоваться вместо него, при этом задавать более строгие ограничения:

При наследовании можно переопределять методы родительского класса. При этом нужно либо сохранить сигнатуру метода, либо соблюдать некоторые правила:

  • Типы параметров переопределенного метода бивариантны — они не ограничены
  • Тип возвращаемого значения переопределенного метода ковариантен — он должен быть либо тем же, либо более узким

Родительский метод принимает string и возвращает string. Переопределенный метод должен иметь более широкий или более узкий тип — например, string | null или 'some string'. Возвращать же должен такой же или более узкий тип — например, 'some string':