TypeScript Getters & Setters
Control property access with accessors
🎛️ What are Getters & Setters?
Getters and setters are special methods that provide controlled access to class properties. Getters retrieve values, setters update them. They allow validation, computed properties, and encapsulation while maintaining simple property-like syntax for users.
class Person {
private _age: number = 0;
get age(): number {
return this._age;
}
set age(value: number) {
this._age = value;
}
}
Getter & Setter Concepts
Getter
Retrieve property values
get fullName(): string {
return `${this.first} ${this.last}`;
}
Setter
Update property values
set age(value: number) {
if (value > 0) {
this._age = value;
}
}
Validation
Validate before setting values
set email(value: string) {
if (value.includes('@')) {
this._email = value;
}
}
Computed
Calculate values on the fly
get area(): number {
return this.width * this.height;
}
🔹 Basic Getter Example
Getters allow you to access private properties:
class Product {
private _price: number;
private _name: string;
constructor(name: string, price: number) {
this._name = name;
this._price = price;
}
get name(): string {
return this._name;
}
get price(): number {
return this._price;
}
get priceWithTax(): number {
return this._price * 1.1; // 10% tax
}
}
const laptop = new Product("Laptop", 1000);
console.log(laptop.name); // Laptop
console.log(laptop.price); // 1000
console.log(laptop.priceWithTax); // 1100
Output:
Laptop 1000 1100
🔹 Basic Setter Example
Setters allow you to update private properties with validation:
class User {
private _username: string = "";
private _age: number = 0;
get username(): string {
return this._username;
}
set username(value: string) {
if (value.length >= 3) {
this._username = value;
} else {
console.log("Username must be at least 3 characters");
}
}
get age(): number {
return this._age;
}
set age(value: number) {
if (value > 0 && value < 120) {
this._age = value;
} else {
console.log("Invalid age");
}
}
}
const user = new User();
user.username = "Jo"; // Username must be at least 3 characters
user.username = "John"; // ✅ Valid
user.age = 25; // ✅ Valid
console.log(user.username); // John
console.log(user.age); // 25
Output:
Username must be at least 3 characters John 25
🔹 Computed Properties
Getters can calculate values dynamically:
class Rectangle {
constructor(
private width: number,
private height: number
) {}
get area(): number {
return this.width * this.height;
}
get perimeter(): number {
return 2 * (this.width + this.height);
}
get isSquare(): boolean {
return this.width === this.height;
}
}
const rect = new Rectangle(5, 10);
console.log(`Area: ${rect.area}`); // Area: 50
console.log(`Perimeter: ${rect.perimeter}`); // Perimeter: 30
console.log(`Is square: ${rect.isSquare}`); // Is square: false
const square = new Rectangle(5, 5);
console.log(`Is square: ${square.isSquare}`); // Is square: true
Output:
Area: 50 Perimeter: 30 Is square: false Is square: true
🔹 Full Name Example
Combine getters and setters for complex properties:
class Person {
private firstName: string = "";
private lastName: string = "";
get fullName(): string {
return `${this.firstName} ${this.lastName}`;
}
set fullName(value: string) {
const parts = value.split(' ');
if (parts.length === 2) {
this.firstName = parts[0];
this.lastName = parts[1];
} else {
console.log("Please provide first and last name");
}
}
}
const person = new Person();
person.fullName = "John Doe";
console.log(person.fullName); // John Doe
person.fullName = "Jane Smith";
console.log(person.fullName); // Jane Smith
person.fullName = "SingleName"; // Please provide first and last name
Output:
John Doe Jane Smith Please provide first and last name
🔹 Temperature Converter
Use getters and setters for unit conversion:
class Temperature {
private celsius: number = 0;
get c(): number {
return this.celsius;
}
set c(value: number) {
this.celsius = value;
}
get f(): number {
return (this.celsius * 9/5) + 32;
}
set f(value: number) {
this.celsius = (value - 32) * 5/9;
}
}
const temp = new Temperature();
temp.c = 0;
console.log(`${temp.c}°C = ${temp.f}°F`); // 0°C = 32°F
temp.f = 100;
console.log(`${temp.c}°C = ${temp.f}°F`); // 37.77°C = 100°F
Output:
0°C = 32°F 37.77777777777778°C = 100°F
💡 Key Points:
-
Getters
use the
getkeyword and return a value -
Setters
use the
setkeyword and accept one parameter - Access getters/setters like regular properties (no parentheses)
- Use setters for validation before updating values
- Use getters for computed properties that don't need storage
-
Private properties often use underscore prefix:
_propertyName