Lessons
TypeScript Tutorial
TypeScript Control Structures
TypeScript Function Types
Static in TypeScript
Introduction to TypeScript Static Members
TypeScript Static members are defined using the static
keyword within a class. Unlike instance members, which are tied to individual objects created from the class, static members are associated directly with the class itself. This distinction allows static members to be shared across all instances of the class, making them ideal for defining constants or utility functions that do not depend on instance-specific data.
How to Declare Static Properties
A typescript static property is a variable that is declared with the static
keyword inside a class. It is shared among all instances of the class and can be accessed using the class name.
Example:
1 2 3
class Circle { static pi: number = 3.14; }
In this example, pi
is a static property of the Circle
class, representing the mathematical constant π. Since it's static, it belongs to the class itself rather than any object instantiated from the class.
Declare Static Methods in TypeScript
Typescript Static methods are functions defined with the static
keyword inside a class. They can be called without creating an instance of the class and typically perform operations that are relevant to the class as a whole.
Example:
1 2 3 4 5 6 7
class Circle { static pi: number = 3.14; static calculateArea(radius: number): number { return this.pi * radius * radius; } }
Here, calculateArea
is a static method that computes the area of a circle given its radius. It utilizes the static property pi
to perform the calculation.
How to Access Static Members in TypeScript
Typescript Static members are accessed using the class name followed by the dot notation, without the need to instantiate the class.
Example:
1 2
console.log(Circle.pi); // Output: 3.14 console.log(Circle.calculateArea(5)); // Output: 78.5
In this example, both the static property pi
and the static method calculateArea
are accessed directly through the Circle
class.
Static vs. Instance Members
It's crucial to distinguish between static and instance members:
- Static Members: Belong to the class itself and are shared among all instances. They are accessed using the class name.
- Instance Members: Belong to individual objects created from the class. Each object has its own copy of instance members, and they are accessed through the object.
Example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
class Circle { static pi: number = 3.14; // Static property radius: number; // Instance property constructor(radius: number) { this.radius = radius; } calculateCircumference(): number { return 2 * Circle.pi * this.radius; } } const circle1 = new Circle(5); console.log(circle1.calculateCircumference()); // Output: 31.400000000000002
In this example, pi
is a static property, while radius
is an instance property. The method calculateCircumference
is an instance method that accesses the static property pi
using the class name Circle
.
Use Cases for Static Members
Static members are particularly useful in scenarios where a property or method is relevant to all instances of a class or when the functionality does not depend on instance-specific data.
Common Use Cases:
- Constants: Defining constant values that are shared across all instances.
1 2 3 4 5
class MathConstants { static readonly PI: number = 3.14159; } console.log(MathConstants.PI); // Output: 3.14159
- Utility Functions: Creating helper methods that perform operations not tied to instance data.
1 2 3 4 5 6 7
class Utility { static toUpperCase(str: string): string { return str.toUpperCase(); } } console.log(Utility.toUpperCase('hello')); // Output: HELLO
- Counters: Keeping track of the number of instances created from a class.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
class Employee { private static headcount: number = 0; constructor( private firstName: string, private lastName: string, private jobTitle: string) { Employee.headcount++; } public static getHeadcount(): number { return Employee.headcount; } } let john = new Employee('John', 'Doe', 'Front-end Developer'); let jane = new Employee('Jane', 'Doe', 'Back-end Developer'); console.log(Employee.getHeadcount()); // Output: 2
Limitations and Considerations
While static members offer several advantages, it's important to be aware of their limitations:
- No Access to Instance Members:
Static methods and properties cannot directly access or manipulate instance members of a class because they do not operate on specific objects. To use instance members, you need to pass an instance of the class to the static method. - Overhead in Maintenance:
Overusing static members can lead to tightly coupled code, as static properties and methods are not easily mockable in tests compared to instance members. - Lack of Inheritance:
Static members are not inherited by instances of derived classes but can still be accessed through the derived class itself.
Conclusion
Static methods and properties in TypeScript are powerful tools that provide utility and efficiency when working with classes. By using the static
keyword, developers can define members that belong to the class rather than its instances, making them ideal for constants, utility functions, and shared counters.
Key Takeaways
- Definition and Usage: Static members are associated with the class and can be accessed without creating an instance.
- Utility: They are commonly used for constants, utility functions, and tracking shared information across instances.
- Limitations: Static members cannot access instance members directly and are not inherited by instances of derived classes.