HTML Diff
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