TypeScript Inheritance

Inheritance is the ability of a class to extend the functionality of another class. Former one is called Child Class or Sub Class and the later is called Parent Class or Super Class. Hence, Child Class can inherit the properties (state) and functions (behavior) and they themselves can have additional class variables and functions, thus extending.

Syntax

To realize the inheritance of a class to another, the keyword extends is used. Following is the syntax to declare the inheritance of a class to other class :

</>
Copy
class ChildClassName extends ParentClassName{
    // class body
}

Example – TypeScript Inheritance

In this example, we shall consider Person as Parent class and Student as Child class. Justification is that, a Person can be a Student and Student class can inherit the properties and behaviors of Person Class, but Student class has additional properties and functionalities.

example.ts

</>
Copy
class Person{
    name:string
    speak():void{
        console.log(this.name+" can speak.")
    }
}
class Student extends Person{
    // variables
    rollnumber:number
    // constructors
    constructor(rollnumber:number, name1:string){
        super(); // calling Parent's constructor
        this.rollnumber = rollnumber
        this.name = name1
    }
    // functions
    displayInformation():void{
        console.log("Name : "+this.name+", Roll Number : "+this.rollnumber)
    }
}
var student1 = new Student(2, "Rohit")
var student2 = new Student(4, "Kohli")
// accessing variables
console.log("Student 1 name is : "+student1.name)
console.log("Student 2 roll number is : "+student2.rollnumber)
console.log("\n---Student 1---")
// calling functions
student1.displayInformation()
// calling funciton of parent class
student1.speak()
console.log("\n---Student 2---")
student2.displayInformation()
student2.speak()

name variable is declared in Person Class. But as the Student Class inherits Person Class, the name variable could be accessed by the object of Student Class. The same explanation holds for the function speak() which is defined in Person Class, and could be accessed by the object of Student Class.

Compile the above code to JavaScript code using tsc.

Output

Student 1 name is : Rohit
Student 2 roll number is : 4
 
---Student 1---
Name : Rohit, Roll Number : 2
Rohit can speak.
---Student 2---
Name : Kohli, Roll Number : 4
Rohit can speak.

The compiled JavaScript code looks like following.

example.js

</>
Copy
var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var Person = /** @class */ (function () {
    function Person() {
    }
    Person.prototype.speak = function () {
        console.log(this.name + " can speak.");
    };
    return Person;
}());
var Student = /** @class */ (function (_super) {
    __extends(Student, _super);
    // constructors
    function Student(rollnumber, name1) {
        var _this = _super.call(this) || this;
        _this.rollnumber = rollnumber;
        _this.name = name1;
        return _this;
    }
    // functions
    Student.prototype.displayInformation = function () {
        console.log("Name : " + this.name + ", Roll Number : " + this.rollnumber);
    };
    return Student;
}(Person));
var student1 = new Student(2, "Rohit");
var student2 = new Student(4, "Kohli");
// accessing variables
console.log("Student 1 name is : " + student1.name);
console.log("Student 2 roll number is : " + student2.rollnumber);
console.log("\n---Student 1---");
// calling functions
student1.displayInformation();
// calling funciton of parent class
student1.speak();
console.log("\n---Student 2---");
student2.displayInformation();
student2.speak();

Conclusion

In this TypeScript Tutorial, we have learnt about TypeScript Inheritance, and how this Object Oriented Concept could be used to extend the functionality of a class in another class.