メインコンテンツにスキップ
モジュール 4 · レッスン 1 / 2コース内の 7/14~15 min
モジュールのレッスン (1/2)

クラスと修飾子

TypeScript は、静的型付け、アクセス修飾子、短縮パラメータ プロパティなどの強力なオブジェクト指向プログラミング (OOP) 機能を備えた標準 ES6 クラスを拡張します。

クラスとアクセス修飾子

TypeScript では、次の 3 つの主要なキーワードを使用して、クラス メンバー、プロパティ、メソッドの可視性を制御できます。

  • public (デフォルト): メンバーにはどこからでもアクセスできます。
  • private: メンバーは、それを定義するクラス内でのみアクセス可能です。
  • protected: メンバーはクラスおよびそのサブクラス内でアクセス可能です (継承)。
TS
class Animal {
  public name: string;
  private age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  public getAge(): number {
    return this.age;
  }
}

パラメータのプロパティ

TypeScript は、コンストラクター内でクラス メンバーを直接宣言して初期化するための短縮構文を提供します。コンストラクター パラメーターの先頭にアクセス修飾子を付けると、プロパティが自動的に作成され、割り当てられます。

TS
// This syntax does exactly the same as the previous example!
class Animal {
  constructor(
    public name: string,
    private age: number,
  ) {}
}

インターフェースの実装

クラスは、implements キーワードを使用して 1 つ以上のインターフェイスを実装できます。これにより、必要なメソッドとプロパティをすべて定義することで、クラスが特定の規約に準拠するようになります。

TS
interface Flyable {
  fly(altitude: number): void;
}

class Bird implements Flyable {
  constructor(public name: string) {}

  fly(altitude: number): void {
    console.log(`${this.name} is flying at ${altitude} meters.`);
  }
}

継承と super

TypeScript はクラスの継承を完全にサポートしています。クラスは、extends キーワードを使用して別のクラスを拡張できます。サブクラスがコンストラクターを定義する場合、this にアクセスする前に、super() 関数を使用して基本クラスのコンストラクターを呼び出す必要があります。

TS
class Person {
  constructor(public name: string) {}
}

class Student extends Person {
  constructor(
    name: string,
    public grade: number,
  ) {
    super(name); // Calls the Person constructor
  }
}

自分で試してみてください

演習 1: 車のクラスとプライベート修飾子

運動#ts.m4.l1.e1
試行回数: 0読み込み中…

Car という名前のクラスを宣言します。コンストラクターで定義された読み取り専用モデル プロパティ (文字列)、0 に初期化されたプライベート マイレージ プロパティ (数値)、マイレージをマイル単位で増分するパブリック メソッド drive(miles:number): void、およびマイレージを返すゲッターまたはメソッド getMileage():number が必要です。

エディターを読み込み中…
ヒントを表示

プライベートマイレージを使用: 数値 = 0;変数をプライベートにし、constructor(public readonly model: string) {} を短縮表現として使用します。

3 回の試行後に解決策が利用可能になります

演習 2: シェイプ インターフェイスとサークル クラス

運動#ts.m4.l1.e2
試行回数: 0読み込み中…

Shape インターフェイスを実装する Circle クラスを実装してコードを完成させます。このクラスには、コンストラクターを介して設定された読み取り専用の radius プロパティ (数値) が必要で、 getArea():number (Math.PI * radius * radius を返す) を実装する必要があります。

エディターを読み込み中…
ヒントを表示

Circle クラスに Shape を実装し、getArea():number メソッドを定義します。

3 回の試行後に解決策が利用可能になります

演習 3: 抽象車両クラスとオートバイのサブクラス

運動#ts.m4.l1.e3
試行回数: 0読み込み中…

抽象クラス Vehicle を拡張する Motorcycle という名前のクラスを宣言します。 start() メソッドを実装して、文字列 'Motorcycle ' に続いて make (this.make) と 'started' を返す必要があります。

エディターを読み込み中…
ヒントを表示

Vehicle を拡張した Motorcycle クラスを使用し、正しい文字列を返す start(): string メソッドを実装します。

3 回の試行後に解決策が利用可能になります

演習 4: パラメータのプロパティと継承

運動#ts.m4.l1.e4
試行回数: 0読み込み中…

コンストラクターの短縮表現を使用して、読み取り専用プロパティ ID (数値) とパブリック プロパティ名 (文字列) を定義する Employee という名前のクラスを作成します。次に、Employee を拡張するクラス Developer を作成し、コンストラクターを介してパブリック プロパティの部門 (文字列) を追加します。

エディターを読み込み中…
ヒントを表示

Developer コンストラクターで super(id, name) を使用し、public 部門を使用してコンストラクター経由でプロパティを定義します。

3 回の試行後に解決策が利用可能になります