В этом руководстве вы узнаете о концепции наследования классов вTypeScript и о том, как использовать ее для повторного использования функциональности другого класса.
Введение в наследование TypeScript
Класс может повторно использовать свойства и методы другого класса. В TypeScript это называется наследованием.
Класс, который наследует свойства и методы, называется дочерним классом. А класс, чьи свойства и методы наследуются, называется родительским классом. Эти имена исходят из того, что дети наследуют гены от родителей.
Наследование позволяет повторно использовать функциональность существующего класса, не переписывая его.
JavaScript использует прототипное наследование, а не классическое наследование, такое как Java или C#. ES6 вводит синтаксис класса, который является просто синтаксическим сахаром прототипного наследования. TypeScript поддерживает наследование, как ES6.
Предположим, у вас есть следующий класс Person :
class Person {
constructor(private firstName: string, private lastName: string) {
this.firstName = firstName;
this.lastName = lastName;
}
getFullName(): string {
return `${this.firstName} ${this.lastName}`;
}
describe(): string {
return `This is ${this.firstName} ${this.lastName}.`;
}
}
Чтобы наследовать класс, вы используете ключевое слово extends. Например, класс Employee наследует класс Person :
class Employee extends Person {
//..
}В этом примере Employee является дочерним классом, а Person — родительским классом.
Конструктор
Поскольку класс Person имеет конструктор, который инициализирует firstName и lastName, вам необходимо инициализировать эти свойства в конструкторе класса Employee, вызвав конструктор его родительского класса.
Чтобы вызвать конструктор родительского класса в конструкторе дочернего класса, вы используете синтаксис super(). Например:
class Employee extends Person {
constructor(
firstName: string,
lastName: string,
private jobTitle: string) {
// call the constructor of the Person class:
super(firstName, lastName);
}
}Следующее создает экземпляр класса Employee :
let employee = new Employee('John','Doe','Front-end Developer');
Поскольку класс Employee наследует свойства и методы класса Person, вы можете вызывать getFullName() и describe() для объекта employee следующим образом:
let employee = new Employee('John', 'Doe', 'Web Developer');
console.log(employee.getFullName());
console.log(employee.describe());
Выход:
John Doe This is John Doe.
Переопределение метода
Когда вы вызываете метод employee.describe() для объекта employee, выполняется метод Person describe() класса UGVyc29u, который показывает сообщение: This is John Doe.
Если вы хотите, чтобы класс Employee имел собственную версию метода describe(), вы можете определить его в классе Employee следующим образом:
class Employee extends Person {
constructor(
firstName: string,
lastName: string,
private jobTitle: string) {
super(firstName, lastName);
}
describe(): string {
return super.describe() + `I'm a ${this.jobTitle}.`;
}
}В describe() мы вызвали метод describe() родительского класса, используя синтаксис super.methodInParentClass().
Если вы вызываете метод describe() для объекта employee, вызывается метод describe() в классе Employee :
let employee = new Employee('John', 'Doe', 'Web Developer');
console.log(employee.describe());Выход:
This is John Doe.I'm a Web Developer.
Заключение
- Используйте ключевое слово
extends, чтобы класс мог наследовать от другого класса в TypeScript. - Используйте
super()в конструкторе дочернего класса, чтобы вызвать конструктор родительского класса. Кроме того, используйте синтаксисsuper.methodInParentClass()для вызоваmethodInParentClass()в методе дочернего класса.
