ゲッター、セッター

JavaScript と同じようにクラスのプロパティ宣言時に名前の頭にgetを付けるとゲッター、setを付けるとセッターを定義できます。

class Foo {
  private _value: string;

  public get value() {
    // Type 'string | undefined' is not assignable to type 'string'.
    //   Type 'undefined' is not assignable to type 'string'
    return this._value;
  }

  public set value(value: string) {
    this._value = value;
  }
}

ゲッターの戻り値はセッターの引数の型になる

以下のコードはエラーになります。

class Foo {
  private _value: string | undefined;

  public get value() {
    return this._value;
  }

  public set value(value: string) {
    this._value = value;
  }
}

セッターでstringを代入していることでゲッターはstringの戻り値を期待するようになりますが、肝心の_valueundefinedである可能性があるということになるからです。