TypeScript Getter and Setter

Note: If you're new to TypeScript, check our Getting Started with TypeScript tutorial first.


TypeScript getters and setters are special methods that provide controlled access to object properties:

  • Getters allow us to read private properties like regular fields.
  • Setters let us add custom logic when assigning values to fields.

Types of Object Properties

In TypeScript, object properties can be accessed in two ways:

  • Data Properties: They hold values directly.
  • Accessor Properties: They are the get() and set() methods we use to access or modify values.

Data Property

A TypeScript data property is a key-value pair within an object that holds a value directly. It can store any type of data, such as strings, numbers, objects, or functions.

For example,

 class Student { // Data property private _firstName: string = "Monica"; }

Accessor Property

In TypeScript, accessor properties are methods that get or set the value of an object. These are defined using the get and set keywords.

  • get: to define a getter method to get the property value.
  • set: to define a setter method to set the property value.

TypeScript Getter

In TypeScript, getter methods are used to access the (often private) properties of a class in a controlled way. For example,

 class Student { // Data property private _firstName: string = "Monica"; 
// Getter method get getName(): string { return this._firstName; } }
const student = new Student(); // Accessing the getter console.log(student.getName);

Output

 Monica

In the above program, a getter method getName() is created to access the property of an object.

 get getName() { return this._firstName; }

Note: To create a getter method, the get keyword is used.

And also when accessing the value, we access the value as a property.

 student.getName;

Common Mistakes

Accessing the Private Data Property

In the previous example, trying to access the private property directly will cause an error. For example,

 console.log(student._firstName);

This happens because _firstName is marked as private, meaning it can only be accessed from within the class, not from outside.

Accessing the Getter as a Method

Another common mistake is calling the getter like a function. For example,

 console.log(student.getName());

Here, getName is a getter, not a method. So it should be accessed like a regular property, without parentheses:

 console.log(student.getName);

TypeScript Setter

In TypeScript, setter methods are used to update the values of class properties. For example,

 class Student { private _firstName: string = 'Monica'; // Getter method get firstName(): string { return this._firstName; } 
// Setter method set changeName(newName: string) { this._firstName = newName; } }
const student = new Student(); console.log(student.firstName); // Monica // Change(set) object property using a setter student.changeName = 'Sarah'; console.log(student.firstName); // Sarah

In the above example, the setter method is used to change the value of an object.

 set changeName(newName: string) { this._firstName = newName; }

Note: To create a setter method, the set keyword is used.

As shown in the above program, the value of firstName is Monica.

Then the value is changed to Sarah.

 student.changeName = 'Sarah';

Note: Setter must have exactly one formal parameter.


Example: TypeScript Getter and Setter

Now, let's write a separate program that has both the getter and setter methods. We'll also implement some custom logic inside the setter methods:

 // Define a class named 'Person' class Person { private _name = ""; private _age = 0; // Getter for 'name' get name() { return this._name; } // Setter for 'name' - converts any value to string set name(value: string | number | boolean) { this._name = String(value); } // Getter for 'age' get age() { return this._age; } // Setter for 'age' - converts to number, uses 0 if invalid set age(value: string | number | boolean) { const num = Number(value); this._age = Number.isFinite(num) ? num : 0; } } const person = new Person(); person.name = "Alice"; person.age = "30"; console.log(person.name); console.log(person.age);

Output

 Alice 30

Here, the Person class has two data properties: _name and _age. So, we've created their respective getter and setter methods.

We have implemented the following logic inside the setter methods:

  • name() - This setter converts its argument to string type with the String() method and assigns it to the _name property.
  • age() - This setter converts its argument to number type with the Number() method and assigns it to the _age property. If the argument is invalid, it sets _age to 0.

Read More:

Did you find this article helpful?

Our premium learning platform, created with over a decade of experience and thousands of feedbacks.

Learn and improve your coding skills like never before.

Try Programiz PRO
  • Interactive Courses
  • Certificates
  • AI Help
  • 2000+ Challenges