次のProfileクラスがあったとします。

class Profile {
  public name: string;
  private age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}

Profileクラスを使ってみます。

let tanaka = new Profile("田中", 23);

tanaka.name;
tanaka.age;

image2

namepublicなので呼び出しができるのですが、ageprivateなので呼び出しができません。

ageを外部から呼び出し可能にするには、getter を使います。

方法は、Profile クラス内に getter メソッドを作成します。

class Profile {
  public name: string;
  private age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  get age(): number {
    return this.age;
  }
}

このままでは、age()に『識別子 'age' が重複しています。』のエラーが発生しています。

image3

こちらのエラーを解除するために、変数の前にアンダースコア『_』をつけます。

class Profile {
  public name: string;
  private _age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this._age = age;
  }

  get age(): number {
    return this.age;
  }
}

image4

エラーが解除されました。

tanaka.age も見てみます。

image5

無事、呼び出せています。

また、tanaka.name を『佐藤』、tanaka.age を『25』に代入してみましょう。

tanaka.name = "佐藤";
tanaka.age = 25;

image6

tanaka.name は代入できましたが、tanaka.age は読み取り専用プロパティなので代入できませんでした。

つまり getter は、呼び出すためのメソッドということです。

ブログ一覧