今回はTypeScriptにおけるゲッター(getter)とセッター(setter)について解説したいと思います。アクセス修飾子「privare」を付与した場合、外部から値を呼び出すことや取得することができなくなります。しかし、そういった時にゲッターとセッターを定義することで呼び出しと取得が可能になります。
コード例
まずはゲッターとセッターを使用する前の準備をしましょう。
以下は基本的なクラス宣言のコード例です。
class Fruits {
constructor(public fruitsname: string) {
}
say(): void {
console.log("好きなフルーツは" + this.fruitsname + "です。")
}
}
var favorite = new Fruits("ぶどう");
console.log(favorite.fruitsname);
=> ぶどう
favorite.say();
=> 好きなフルーツはぶどうです。

ここに、外部からアクセスできなくするアクセス修飾子「private」を付与します。
class Fruits {
constructor(private _fruitsname: string) {
}
say(): void {
console.log("好きなフルーツは" + this._fruitsname + "です。")
}
}
var favorite = new Fruits("ぶどう");
console.log(favorite._fruitsname);
=> Property '_fruitsname' is private and only accessible within class 'Fruits'.
favorite.say();
privateを付与することで、Fruitsクラスにアクセスすることができなくなり「Property ‘_fruitsname’ is private and only accessible within class ‘Fruits’.」というようなエラーが出力されてしまっています。
このようにprivateを使用することで安全なプログラムを書くことができるようになります。しかし、値の設定や取得をしたい場合はどうすれば良いのでしょうか。
ここからがゲッターとセッターの出番になります。
ゲッター(getter)
private変数を取得したい場合は、ゲッターを定義する必要があります。
ゲッターを定義する際はgetというメソッドを定義し、その後ろに取得する時のメソッド名を記述します。以下のコードを見てみましょう。
class Fruits {
constructor(private _fruitsname: string) {
}
say(): void {
console.log("好きなフルーツは" + this._fruitsname + "です。")
}
get fruitsname() {
return this._fruitsname;
}
}
var favorite = new Fruits("ぶどう");
console.log(favorite.fruitsname);
=> ぶどう
favorite.say();
=> 好きなフルーツはぶどうです。
上記のように「get fruitsname()」というゲッターをセットすることで、「console.log(favorite.fruitsname);」を実行した際にゲッターが呼び出されるようになります。
セッター(setter)
一方でprivate変数に値を設定したい場合は、セッターを定義する必要があります。
セッターを定義する際はsetというメソッドを定義し、その後ろに設定する時のメソッド名を記述します。以下のコードを見てみましょう。
class Fruits {
constructor(private _fruitsname: string) {
}
say(): void {
console.log("好きなフルーツは" + this._fruitsname + "です。")
}
get fruitsname() {
return this._fruitsname;
}
set fruitsname(newValue: string) {
this._fruitsname = newValue;
}
}
var favorite = new Fruits("ぶどう");
console.log(favorite.fruitsname);
=> ぶどう
favorite.say();
=> 好きなフルーツはぶどうです。
favorite.fruitsname = "バナナ";
console.log(favorite.fruitsname);
=> バナナ
favorite.say();
=> 好きなフルーツはバナナです。
上記のように「set fruitsname(newValue: string)」というセッターをセットすることで、private変数を上書きすることができます。
「favorite.fruitsname = “バナナ”」とすることでセッターの引数である「newValue :string」に代入され、そこから変数に再定義されます。
注意点
ここまででゲッターとセッターについて見てきましたが、コンパイル時には1つ注意しなければならない点があります。
それはコンパイルするコマンドの末尾に「-t ES5」というオプションをつけなければならないということです。
通常であればtscコマンドでコンパイルを実行し、node.jsでJSを実行しています。しかし、ゲッターとセッターのコードをコンパイルする場合は「-t ES5」オプションをつけなければなりません。
【通常】
% tsc test.ts
=> error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.というエラーが出力される
【ゲッター/セッター定義時】
% tsc test.ts -t ES5
% node test.js
まとめ
- privateは外部からのアクセスを制限するアクセス修飾子である。
- private変数の直前には「アンダーバー(_)」を付与する。
- ゲッターとはprivateな値を取得する際に定義する。
- セッターとはprivateな値に新たな値を設定する際に定義する。
- ゲッターとセッターのコンパイル時には「-t ES5」というオプションを付与する。
参考
TypeScript初心者が知っておくと嬉しいこと:
https://qiita.com/kotaonaga/items/13bec787769d6e8efc52
typescriptにおけるgetterとsetterを理解する:
https://qiita.com/kuropp/items/ebefeec110ea6a2beb62
今回はTypeScriptにおけるゲッター(getter)とセッター(setter)について解説しました。オブジェクト指向なプログラミング言語を学ぶ上で欠かせない概念なので、ぜひこの機会に理解を深めていただけたらと思います。