簡単な例で TypeScript クラスを使用する方法

TypeScript は、オブジェクト指向プログラミングを可能にするクラスの概念など、JavaScript に強力な機能をもたらします。クラスは、オブジェクトの作成、データのカプセル化、動作の定義のための青写真を提供します。このガイドでは、簡単な例を使用して TypeScript クラスの基本について説明します。

クラスとは何ですか?

クラスは、定義済みのプロパティとメソッドを持つオブジェクトを作成するための設計図です。コードの整理、再利用性の促進、スケーラブルなアプリケーションの作成に役立ちます。TypeScript のクラスは、他のオブジェクト指向プログラミング言語のクラスと同様に機能します。

基本クラスの定義

TypeScript でクラスを定義するには、class キーワードの後に​​クラス名と、プロパティとメソッドを含む中括弧のセットを続けます。

基本クラスの例

以下は、プロパティとメソッドを持つ単純な Person クラスの例です。

class Person {
  name: string;
  age: number;

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

  greet(): void {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

const person1 = new Person("Alice", 30);
person1.greet(); // Output: Hello, my name is Alice and I am 30 years old.

この例では、Person クラスには、nameage の 2 つのプロパティがあります。コンストラクター メソッドはこれらのプロパティを初期化し、greet メソッドは挨拶メッセージを出力します。

アクセス修飾子

TypeScript は、クラス メンバーの可視性を制御するための 3 つのアクセス修飾子を提供します。

  • public: メンバーはどこからでもアクセスできます (デフォルト)。
  • private: メンバーはクラス内でのみアクセスできます。
  • protected: メンバーはクラスとそのサブクラス内でアクセスできます。

アクセス修飾子の使用

TypeScript クラスでアクセス修飾子を使用する方法は次のとおりです。

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;
  }
}

const dog = new Animal("Buddy", 5);
console.log(dog.name); // Output: Buddy
console.log(dog.getAge()); // Output: 5
// console.log(dog.age); // Error: 'age' is private and only accessible within class 'Animal'.

この例では、name はクラス外部からアクセスできるパブリック プロパティですが、age はクラス内部からのみアクセスできるプライベート プロパティです。

TypeScript における継承

TypeScript は継承をサポートしており、クラスが別のクラスからプロパティとメソッドを継承できます。これにより、コードの再利用とクラスの階層の作成が容易になります。

継承の例

以下は、基本クラス Animal から継承されたクラス Dog の例です。

class Animal {
  constructor(public name: string) {}

  makeSound(): void {
    console.log(`${this.name} makes a sound.`);
  }
}

class Dog extends Animal {
  constructor(name: string) {
    super(name); // Call the constructor of the base class
  }

  makeSound(): void {
    console.log(`${this.name} barks.`);
  }
}

const dog = new Dog("Buddy");
dog.makeSound(); // Output: Buddy barks.

この例では、Dog クラスは Animal クラスを拡張し、makeSound メソッドをオーバーライドします。

ゲッターとセッター

TypeScript を使用すると、プロパティのゲッターとセッターを定義して、クラス メンバーへの制御されたアクセスを提供できます。

ゲッターとセッターの例

class Person {
  private _name: string;

  constructor(name: string) {
    this._name = name;
  }

  get name(): string {
    return this._name;
  }

  set name(newName: string) {
    if (newName) {
      this._name = newName;
    } else {
      console.log("Name cannot be empty.");
    }
  }
}

const person = new Person("Alice");
console.log(person.name); // Output: Alice
person.name = "Bob";
console.log(person.name); // Output: Bob

この例では、getter メソッドと setter メソッドを使用して name プロパティにアクセスし、変更します。

結論

TypeScript クラスは、オブジェクト指向のコードを簡潔かつ効率的に記述する強力な方法です。プロパティ、メソッド、アクセス修飾子、継承などを構造的に定義できます。TypeScript クラスの使用方法を理解することで、より堅牢で保守しやすいアプリケーション コードを作成できます。