๐ŸŽ“ A1Learner
๐Ÿ”
0 of 42 lessons completed

TypeScript Getters and Setters

A getter computes a value when a property is read. A setter runs code when a property is assigned.

A computed getter over private fields

The class stores only Celsius. The Fahrenheit value is computed on every read.

class Kettle {
  constructor(private celsius: number) {}
  get fahrenheit(): number {
    return this.celsius * 9 / 5 + 32;
  }
  get label(): string {
    return `${this.celsius}C / ${this.fahrenheit}F`;
  }
}
const kettle = new Kettle(25);
console.log(kettle.fahrenheit);
console.log(kettle.label);

A setter that validates and throws

The setter rejects a level outside the range with a plain Error. The stored level keeps its last valid value.

class Tank {
  private storedLevel = 40;
  get level(): number {
    return this.storedLevel;
  }
  set level(v: number) {
    if (v < 0 || v > 100) {
      throw new Error("level out of range");
    }
    this.storedLevel = v;
  }
}
const tank = new Tank();
tank.level = 65;
console.log(tank.level);
try {
  tank.level = 140;
} catch (err) {
  console.log(err instanceof Error ? err.message : "unknown error");
}
console.log(tank.level);

A get-only property over a backing field

The reading property has a getter and no setter. Other methods change the private backing field.

class Gauge {
  private stored = 12;
  get reading(): number {
    return this.stored;
  }
  add(amount: number): void {
    this.stored += amount;
  }
}
const gauge = new Gauge();
gauge.add(3);
console.log(gauge.reading);

Example

class Oven {
  private celsius = 180;
  get fahrenheit(): number {
    return this.celsius * 9 / 5 + 32;
  }
  set fahrenheit(v: number) {
    if (v < 32) {
      throw new Error("too cold");
    }
    this.celsius = (v - 32) * 5 / 9;
  }
  get temperatureC(): number {
    return this.celsius;
  }
}
const oven = new Oven();
console.log(oven.fahrenheit);
oven.fahrenheit = 212;
console.log(oven.temperatureC);

Key points

  • A getter is written with the `get` keyword and takes no parameters.
  • A setter is written with the `set` keyword and takes exactly one parameter.
  • A setter can validate the new value before storing it.
  • A property with only a getter can be read but not assigned.
  • Accessors often wrap a private backing field that stores the real value.
  • Getters and setters make property access run code while keeping property syntax.

In this example, one private field stores the temperature in Celsius. The getter converts it for reading, and the setter converts and validates each assigned Fahrenheit value.

Try it Yourself

Edit the code, then press Run.

Running is simulated ยท TypeScript Playground

Exercise

When does the code inside a getter run?