りゅうじの学習blog

学習したことをアウトプットしていきます。

4/18 TypeScript Class宣言 ゲッターセッター

ゲッターセッターとは

ゲッター

データを取得した時に何かの関数を実行したい時に使う

セッター

何かの値を変更・代入したい時に使う

※TypeScriptには存在しないもの、es6には存在する

使い方

class Teacher extends Person {
  get subject(): string {
    if (!this._subject) {
      throw new Error('サブジェクトがないぜ!')
    }
    return this._subject;
  }
  set subject(value) {
    if (!value) {
      throw new Error('セッターに代入する値が空文字だぜ!');
    }
    this._subject = value;
  }
  constructor(name: string, age: number, private _subject: string) {
    super(name, age);
  }
.
.
.

ゲッター

  • get を付けて定義する
  • teacher.subjectを呼び出した時に実行したい関数を定義できる
  • const teacher = new Teacher('yuki', 28, 'TypeScript');とインスタンス化して、teacher.subjectを呼び出したら、return this._subjectが返るので、TypeScriptが返り値となる

セッター

  • setを付けて定義する
  • 必ず引数を持たせなければならない
  • teacher.subject = 'React'; をすると セッターの引数には’React’が渡り、this._subjectの値が変更(代入)される
class Person {
  constructor(public readonly name: string, public age: number) {}
  greeting() {
    console.log(`おはようございます、${this.name}でございます。年齢は${this.age}です。`)
  }
  incrementAge() {
    this.age += 1;
  }
}

class Teacher extends Person {
  get subject(): string {
    if (!this._subject) {
      throw new Error('サブジェクトがないぜ!')
    }
    return this._subject;
  }
  set subject(value) {
    if (!value) {
      throw new Error('セッターに代入する値が空文字だぜ!');
    }
    this._subject = value;
  }
  constructor(name: string, age: number, private _subject: string) {
    super(name, age);
  }
    override greeting() {
      console.log(`こんにちは、教師の${this.name}です。年齢は${this.age}です。`)
  }
}

const teacher = new Teacher('yuki', 28, 'TypeScript');
console.log(teacher.subject); // インスタンス化時に渡したTypeScriptがゲッターを通して出力される
teacher.subject = 'React'; // セッターにReactを渡して代入される
console.log(teacher.subject); // セッターを通して代入されたReactが出力される
teacher.greeting();

実行結果

[LOG]: "TypeScript" 
[LOG]: "React" 
[LOG]: "こんにちは、教師のyukiです。年齢は28です。"

参考

Udemy 超TypeScript入門パック