Наследование TypeScript

Опубликовано: 3 Января, 2023

Наследование — одна из основных концепций объектно-ориентированного программирования (ООП). Это механизм, в котором один класс получает свойства другого класса. Класс, который наследует свойства и методы, называется дочерним классом , а класс, свойства и методы которого наследуются, называется родительским классом . Наследование позволяет классу повторно использовать функциональность существующего класса, не переписывая его.

Наследование в TypeScript

JavaScript использует прототипное наследование, а не классическое наследование, такое как Java или C++. Typescript использует наследование на основе классов, которое является просто синтаксическим сахаром прототипного наследования. TypeScript поддерживает только одиночное наследование и многоуровневое наследование. В TypeScript класс наследует другой класс, используя ключевое слово extends .

Синтаксис:

class ChildClass extends ParentClass {
    // Methods and fields
}

Пример:

Javascript




class Vehicle{
    honk(): void{
        console.log("Vehicle Honks");
    }
}
class Car extends Vehicle{
    display(): void{
        console.log("This is a Car");
    }
}
let car = new Car();
car.honk();
car.display();

Vehicle Honks
This is a Car

Объяснение: Здесь класс Car наследует метод honk() от класса Vehicle . Таким образом, класс Car может повторно использовать методы своего родительского класса.

Ключевое слово Super: TypeScript использует ключевые слова super для вызова свойств родительского класса. Ключевое слово super используется в основном

  • Чтобы вызвать конструктор родительского класса
  • Для вызова метода родительского класса

Пример: Возьмем пример класса Person, а класс Employee наследует класс Person.

Javascript




class Person {
    constructor(private firstName: string, 
    private lastName: string) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    getName(): string {
        return `I am ${this.firstName} ${this.lastName}.`;
    }
}
class Employee extends Person {
    constructor(
        firstName: string,
        lastName: string,
        private jobTitle: string) {
             
        // Invoking the constructor of the Person class
        super(firstName, lastName);
    }
    displayInfo(): void {
        console.log(super.getName());
        console.log(`My Job title is ${this.jobTitle}`);
    }
}
let employee = new Employee("Mehul"
        "Sharma", "Web Developer");
          
employee.displayInfo();

Выход:

I am Mehul Sharma.
My Job title is Web Developer.

Объяснение: Здесь класс Employee вызывает конструктор класса Person , используя super() для инициализации firstName и lastName . Он также вызывает getName() , используя super в своем собственном методе.

Переопределение метода: TypeScript также поддерживает переопределение метода. Возьмем тот же пример класса Employee , и этот класс переопределит метод класса Person .

Пример:

Javascript




class Person {
    constructor(private firstName: string, 
    private lastName: string) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    displayInfo(): string {
        return `I am ${this.firstName} ${this.lastName}.`;
    }
}
class Employee extends Person {
    constructor(
        firstName: string,
        lastName: string,
        private jobTitle: string) {
  
        // Invoking the constructor of Person class
        super(firstName, lastName);
    }
    displayInfo(): string {
        return super.displayInfo() 
            + `The job title is ${this.jobTitle}.`;
    }
}
let employee = new Employee("Mehul"
    "Sharma", "Web Developer");
  
console.log(employee.displayInfo());

Выход:

I am Mehul Sharma.The job title is Web Developer.

Вывод:

  • Typescript использует ключевое слово extends для реализации наследования.
  • Используя super() , дочерний класс может вызывать конструктор, свойства и методы родительского класса.
  • TypeScript также поддерживает переопределение методов.