この動画はメンバー限定動画です

全ての講座が
月額990円で学び放題

講座の情報を見る

TypeScript入門年齢を計算するプログラムを作成しよう①

記事を共有:

  • X
  • Pocket
  • クリップボードにコピー

ここでは、1つクラスを使いながらクラス定義の復習をしつつ、誕生日から年齢を計算するという、少し実用的なプログラムを作成してみましょう。

ここでは、次のようなプログラムを作成してみましょう。

  • Personという抽象クラスを作る
  • Personを継承したMemberクラスとGuestクラスを作る
  • Memberクラスには生年月日をプロパティとして準備する
  • Memberクラスに年齢を取得するメソッドを定義し、計算して返す

では早速作っていきましょう。

Personクラス、Guestクラスを定義しよう

まずは、Personクラスを定義します。このクラスには、nameプロパティのみがある、シンプルな抽象クラスです。また、コンストラクタで名前の初期値を設定できるようにします。

abstract class Person {
  public name: string;
  constructor(name: string) {
    this.name = name;
  }
}

このクラスは「抽象クラス」なので、直接このインスタンスを作ることはできません。そこで、継承クラスとして「Guest」クラスを作りましょう。

class Guest extends Person {
}

次のようにして使うことができます。

let taro = new Guest("Taro");
console.log(taro.name);

Memberクラスを定義しよう

続いて、Memberクラスを定義しましょう。こちらには、誕生日のプロパティを追加します。プライベートプロパティとして、セッターとゲッターも準備します。

class Member extends Person {
  private _birth: Date;

  get birth(): Date {
    return this._birth;
  }
  set birth(value: Date) {
    this._birth = value;
  }
}

コンストラクタを拡張しよう

ここで、誕生日もコンストラクタで設定できるようにしたいとしましょう。しかし、親クラスにもコンストラクタが定義されているため、普通に定義することはできません。

constructor(name: string, birth: Date) {
  this._birth = birth;
}

こうすると、次のようなエラーが表示されます。

派生クラスのコンストラクターには ‘super’ の呼び出しを含める必要があります。

これは、親クラスのコンストラクタを呼び出していないため。親クラスでもコンストラクタが定義されている場合、子クラスからはこのコンストラクタを呼び出す必要があります。ここで必要なのが「super」という記述です。次のように追加しましょう。

  constructor(name: string, birth: Date) {
    super(name);
    this._birth = birth;
  }

これで、親クラスのコンストラクタが呼び出されるようになり、正しくプロパティがセットされるようになります。

これで、Memberクラスができあがりました。次のようにして利用できます。

const yoshiko = new Member("Yoshiko", new Date("2000-01-03"));
console.log(yoshiko.name);

前のレッスン 次のレッスン