Open In App

How to Create Nested Classes in TypeScript ?

Last Updated : 11 Jan, 2024
Improve
Improve
Like Article
Like
Save
Share
Report

In TypeScript, you can create nested classes using different methods. We will discuss about three different approaches to creating nested classes in TypeScript.

These are the approaches:

By defining nested classes inside a class

In this approach, we will directly define the nested class inside the outer class.

Syntax:

class OuterClass{
static InnerClass = class{
}
}

Example: The below code example defines a nested class inside another class.

Javascript




class OuterClass {
    outerClassProperty: string;
 
    constructor(outerClassProperty: string) {
        this.outerClassProperty = outerClassProperty;
    }
 
    outerClassMethod() {
        console.log
            (`Outer Class property:
            ${this.outerClassProperty}`);
    }
 
    // Nested class
    static InnerClass = class {
        innerClassProperty: string;
 
        constructor(innerClassProperty: string) {
            this.innerClassProperty = innerClassProperty;
        }
 
        innerClassMethod() {
            console.log
                (`Inner Class property:
                ${this.innerClassProperty}`);
        }
    }
}
const outerClassInstance = new OuterClass("GeeksforGeeks");
outerClassInstance.outerClassMethod();
const innerClassInstance =
    new OuterClass.InnerClass("A Computer Science Portal");
innerClassInstance.innerClassMethod();


Output:

Outer Class property: GeeksforGeeks
Inner Class property: A Computer Science Portal

By using the namespaces

The namespace can also be used to create a namespace of Outer class and the namespace of the inner class which can be later merged together to create nested classes.

Syntax:

namespace namespace_name{
export class OuterClass{}
}
namespace namespace_name.OuterClass{
export class InnerClass{}
}

Example: The below code example will help you to create the nested classes using the namespace approach.

Javascript




namespace nestedClasses {
    export class OuterClass {
        outerClassProperty: string;
 
        constructor(outerClassProperty: string) {
            this.outerClassProperty = outerClassProperty;
        }
 
        outerClassMethod() {
            console.log
                (`Outer Class property:
                 ${this.outerClassProperty}`);
        }
    }
}
 
namespace nestedClasses.OuterClass {
    export class InnerClass {
        innerClassProperty: string;
 
        constructor(innerClassProperty: string) {
            this.innerClassProperty = innerClassProperty;
        }
 
        innerClassMethod() {
            console.log
                (`Inner Class property:
                 ${this.innerClassProperty}`);
        }
    }
}
 
const outerClassInstance =
    new nestedClasses.OuterClass("GeeksforGeeks");
outerClassInstance.outerClassMethod();
const innerClassInstance =
    new nestedClasses.OuterClass
        .InnerClass("A Computer Science Portal");
innerClassInstance.innerClassMethod();


Output:

Outer Class property: GeeksforGeeks 
Inner Class property: A Computer Science Portal

By using the modules

The modules can also be used to create nested classes in TypeScript in the same way as we used namespace.

Syntax:

namespace namespace_name{
export class OuterClass{}
}
namespace namespace_name.OuterClass{
export class InnerClass{}
}

Example: The below example uses the modules to define the nested classes in TypeScript.

Javascript




module nestedClasses {
    export class OuterClass {
        outerClassProperty: string;
 
        constructor(outerClassProperty: string) {
            this.outerClassProperty = outerClassProperty;
        }
 
        outerClassMethod() {
            console.log
                (`Outer Class property:
             ${this.outerClassProperty}`);
        }
    }
}
 
module nestedClasses.OuterClass {
    export class InnerClass {
        innerClassProperty: string;
 
        constructor(innerClassProperty: string) {
            this.innerClassProperty = innerClassProperty;
        }
 
        innerClassMethod() {
            console.log
                (`Inner Class property:
            ${this.innerClassProperty}`);
        }
    }
}
 
const outerClassInstance =
    new nestedClasses.OuterClass("GeeksforGeeks");
outerClassInstance.outerClassMethod();
const innerClassInstance =
    new nestedClasses.OuterClass
        .InnerClass("A Computer Science Portal");
innerClassInstance.innerClassMethod();


Output:

Outer Class property: GeeksforGeeks 
Inner Class property: A Computer Science Portal


Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads