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
の戻り値を期待するようになりますが、肝心の_value
はundefined
である可能性があるということになるからです。