0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В этом уроке мы разберем наследование. Это механизм, который позволяет создавать подклассы на основе уже существующих классов. Подклассы наследуют свойства и методы родительского класса и могут расширять их.</p>
1
<p>В этом уроке мы разберем наследование. Это механизм, который позволяет создавать подклассы на основе уже существующих классов. Подклассы наследуют свойства и методы родительского класса и могут расширять их.</p>
2
<p>В TypeScript наследование реализуется с помощью ключевого слова extends:</p>
2
<p>В TypeScript наследование реализуется с помощью ключевого слова extends:</p>
3
<p>Наследоваться можно только от одного класса. Но цепочка наследования может быть бесконечной. Например, класс ImageCustomFile наследуется от класса CustomFile, который может наследоваться от другого класса и так далее.</p>
3
<p>Наследоваться можно только от одного класса. Но цепочка наследования может быть бесконечной. Например, класс ImageCustomFile наследуется от класса CustomFile, который может наследоваться от другого класса и так далее.</p>
4
<p>Вся цепочка наследования образует иерархию классов. Так происходит, потому что классы могут использоваться и как типы - иерархия классов полностью совпадает с иерархией типов. Подкласс является подтипом базового класса и может использоваться вместо него, при этом задавать более строгие ограничения:</p>
4
<p>Вся цепочка наследования образует иерархию классов. Так происходит, потому что классы могут использоваться и как типы - иерархия классов полностью совпадает с иерархией типов. Подкласс является подтипом базового класса и может использоваться вместо него, при этом задавать более строгие ограничения:</p>
5
<p>При наследовании можно переопределять методы родительского класса. При этом нужно либо сохранить сигнатуру метода, либо соблюдать некоторые правила:</p>
5
<p>При наследовании можно переопределять методы родительского класса. При этом нужно либо сохранить сигнатуру метода, либо соблюдать некоторые правила:</p>
6
<ul><li>Типы параметров переопределенного метода бивариантны - они не ограничены</li>
6
<ul><li>Типы параметров переопределенного метода бивариантны - они не ограничены</li>
7
<li>Тип возвращаемого значения переопределенного метода ковариантен - он должен быть либо тем же, либо более узким</li>
7
<li>Тип возвращаемого значения переопределенного метода ковариантен - он должен быть либо тем же, либо более узким</li>
8
</ul><p>Родительский метод принимает string и возвращает string. Переопределенный метод должен иметь более широкий или более узкий тип - например, string | null или 'some string'. Возвращать же должен такой же или более узкий тип - например, 'some string':</p>
8
</ul><p>Родительский метод принимает string и возвращает string. Переопределенный метод должен иметь более широкий или более узкий тип - например, string | null или 'some string'. Возвращать же должен такой же или более узкий тип - например, 'some string':</p>
9
9