How to Create Nested Classes in TypeScript ?
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:
Table of Content
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.
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.
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();