Getters & Setters

Methods That Look Like Fields

Getters & Setters

`get` and `set` accessors let computed/validated values look like plain properties to callers.

3 min read Level 1/5 #typescript#classes#getter
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.

Static Members →