Как наследуются от класса в TypeScript
Разбор вопроса «Как наследуются от класса в TypeScript» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Вопрос
Как наследуются от класса в TypeScript
Профессия
Frontend Developer
Что хочет услышать интервьюер
Интервьюер хочет убедиться, что кандидат понимает механизм наследования в TypeScript, включая использование extends, super(), и модификаторов доступа. Также важно знание переопределения методов и добавления новых членов класса.
Ключевые тезисы
- В TypeScript наследование реализуется с помощью ключевого слова
extends, которое позволяет дочернему классу наследовать свойства и методы родительского класса. - Дочерний класс может переопределять методы родительского класса, а также добавлять новые свойства и методы.
- Для вызова конструктора родительского класса из дочернего используется
super(), что обязательно, если у родительского класса есть конструктор. - TypeScript поддерживает модификаторы доступа (public, private, protected), которые влияют на видимость членов класса при наследовании.
Подробный ответ
Наследование в TypeScript реализуется с помощью ключевого слова extends, которое позволяет дочернему классу наследовать свойства и методы родительского класса. Это позволяет создавать иерархии классов, где дочерние классы могут расширять функциональность родительских классов. Дочерний класс может переопределять методы родительского класса, а также добавлять новые свойства и методы. Это полезно для создания специализированных классов на основе уже существующих. Для вызова конструктора родительского класса из дочернего используется super(), что обязательно, если у родительского класса есть конструктор. TypeScript поддерживает модификаторы доступа (public, private, protected), которые влияют на видимость членов класса при наследовании. Например, приватные члены родительского класса недоступны в дочернем классе, а защищенные (protected) доступны только внутри иерархии классов.
Практические примеры
Пример 1
Базовый пример наследования.
class Animal {
constructor(public name: string) {}
move(distance: number = 0) {
console.log(`${this.name} moved ${distance}m.`);
}
}
class Dog extends Animal {
constructor(name: string, public breed: string) {
super(name);
}
bark() {
console.log('Woof! Woof!');
}
}
const dog = new Dog('Rex', 'German Shepherd');
dog.move(10);
dog.bark();Пример 2
Переопределение метода.
class Bird extends Animal {
move(distance: number = 5) {
console.log(`${this.name} flew ${distance}m.`);
}
}
const bird = new Bird('Sparrow');
bird.move();Пример 3
Использование модификаторов доступа.
class Person {
protected age: number;
constructor(age: number) {
this.age = age;
}
}
class Employee extends Person {
constructor(age: number, public department: string) {
super(age);
}
getEmployeeAge() {
return this.age;
}
}
const employee = new Employee(30, 'IT');
console.log(employee.getEmployeeAge());Частые ошибки
- Типичная ошибка — забыть вызвать
super()в конструкторе дочернего класса, если родительский класс имеет конструктор. Это приведет к ошибке компиляции. - Другая ошибка — попытка доступа к приватным членам родительского класса из дочернего класса. Это невозможно, так как приватные члены доступны только внутри класса, где они объявлены.
Связанные темы
- Модификаторы доступа в TypeScript (public, private, protected)
- Интерфейсы и абстрактные классы в TypeScript
- Множественное наследование и миксины в TypeScript
- Декораторы классов в TypeScript
Follow-up вопросы
Что происходит, если дочерний класс не вызывает super() в конструкторе?
Уровень: basic
Если дочерний класс не вызывает super() в конструкторе, TypeScript выдаст ошибку, так как вызов super() обязателен для инициализации родительского класса.
Как работает переопределение методов в дочернем классе?
Уровень: intermediate
Переопределение методов в дочернем классе позволяет изменить поведение метода, унаследованного от родительского класса. Для этого нужно просто объявить метод с тем же именем в дочернем классе.
Какие модификаторы доступа доступны в TypeScript и как они влияют на наследование?
Уровень: intermediate
TypeScript поддерживает модификаторы public, private и protected. Public члены доступны везде, private — только внутри класса, а protected — внутри класса и его наследников.
Может ли дочерний класс наследовать приватные члены родительского класса?
Уровень: advanced
Нет, приватные члены родительского класса (private) недоступны в дочернем классе. Для доступа к таким членам в наследниках используется модификатор protected.
Как в TypeScript реализовать множественное наследование?
Уровень: advanced
TypeScript не поддерживает множественное наследование напрямую. Однако можно использовать миксины или интерфейсы для достижения похожей функциональности.
Использовал ли Generics в React хуках
Разбор вопроса «Использовал ли Generics в React хуках» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Как ограничить Generic в TypeScript
Разбор вопроса «Как ограничить Generic в TypeScript» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.