Methods That Look Like Fields
Getters & Setters
`get` and `set` accessors let computed/validated values look like plain properties to callers.
What you'll learn
- Author `get` and `set` accessors
- Validate input on assignment
- Use a getter to expose derived state
get and set declare methods that callers use as if they
were properties — no parens. They’re great for validated state
and computed views.
A Getter
class Rectangle {
constructor(public width: number, public height: number) {}
get area(): number {
return this.width * this.height;
}
}
const r = new Rectangle(3, 4);
r.area; // 12 — note: no parentheses Callers write r.area, not r.area(). The getter is invoked on
access.
A Setter
class Temperature {
#celsius = 0;
get celsius() { return this.#celsius; }
set celsius(value: number) {
if (value < -273.15) throw new Error("below absolute zero");
this.#celsius = value;
}
get fahrenheit() { return this.#celsius * 9 / 5 + 32; }
}
const t = new Temperature();
t.celsius = 25;
t.celsius; // 25
t.fahrenheit; // 77
t.celsius = -300; // throws set celsius(value) lets callers do t.celsius = 25, but the
setter validates first.
Readonly via Getter Only
A getter without a setter is effectively read-only from outside:
class Counter {
#n = 0;
increment() { this.#n++; }
get value() { return this.#n; }
}
const c = new Counter();
c.value; // 0
c.value = 5; // ✗ Cannot assign to 'value' — it is read-only When Not to Use
If the getter is doing meaningful work (network, expensive math), prefer a regular method. Accessors should be cheap and side-effect free — callers reasonably expect property access to be cheap.
Up Next
static — class-level members that don’t need an instance.