TypeScriptでクラス情報を共有&ユーティリティ関数を提供!静的メソッドの定義と使い方を徹底解説
TypeScript で静的メソッドにアクセスする方法
静的メソッドの定義
静的メソッドを定義するには、static
キーワードをメソッド宣言の前に記述します。例えば、以下のコードは Person
クラスに getNextId()
という静的メソッドを定義します。
class Person {
private static nextId = 1;
public static getNextId(): number {
return this.nextId++;
}
}
静的メソッドへのアクセス
静的メソッドには、以下の2つの方法でアクセスできます。
クラス名を使って
クラス名 followed by ドット (.) followed by メソッド名を使ってアクセスします。例えば、以下のコードは
Person
クラスのgetNextId()
メソッドを呼び出し、新しいPerson
インスタンスの ID を取得します。const nextPersonId = Person.getNextId(); console.log(nextPersonId); // 2
インスタンスから
型注釈付きの
this
キーワードを使ってアクセスします。ただし、これは推奨されません。なぜなら、静的メソッドはインスタンスに依存しないため、インスタンスからアクセスするよりもクラス名からアクセスする方がより明確でわかりやすいからです。const nextPersonId = Person.this.getNextId(); console.log(nextPersonId); // 2
- オーバーロードは、静的メソッドに対してのみ許可されています。
- 静的メソッドは、他の静的メソッドやインスタンスメソッドを呼び出すことができます。
- 静的メソッドは、インスタンス変数にアクセスできません。
Person クラス
Person
クラスは、名前と年齢を持つ人を表すクラスです。このクラスには、getNextId()
という静的メソッドが定義されています。このメソッドは、新しい Person
インスタンスに割り当てるための ID を生成します。
class Person {
private static nextId = 1;
public name: string;
public age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
public static getNextId(): number {
return this.nextId++;
}
}
Point クラス
Point
クラスは、x 座標と y 座標を持つ点を表すクラスです。このクラスには、原点からの距離を計算する getDistanceFromOrigin()
という静的メソッドが定義されています。
class Point {
public x: number;
public y: number;
constructor(x: number, y: number) {
this.x = x;
this.y = y;
}
public static getDistanceFromOrigin(point: Point): number {
const distance = Math.sqrt(point.x * point.x + point.y * point.y);
return distance;
}
}
コードの使用例
以下のコードは、Person
クラスと Point
クラスの静的メソッドを使用する例です。
const person1 = new Person('Alice', 30);
const person2 = new Person('Bob', 25);
console.log(person1.name); // Alice
console.log(person2.age); // 25
const nextPersonId = Person.getNextId();
console.log(nextPersonId); // 3
const point = new Point(5, 10);
const distance = Point.getDistanceFromOrigin(point);
console.log(distance); // 11.180339887498949
このコードでは、まず Person
クラスの 2 つのインスタンスを作成します。次に、Person.getNextId()
メソッドを使用して新しい Person
インスタンスに割り当てる ID を取得します。最後に、Point
クラスの getDistanceFromOrigin()
メソッドを使用して、原点からの点までの距離を計算します。
型注釈付きの this
キーワードを使用して、インスタンスから静的メソッドにアクセスできます。これは、特に静的メソッドがインスタンス変数にアクセスする必要がある場合に役立ちます。ただし、推奨される方法はではありません。なぜなら、静的メソッドはインスタンスに依存しないため、インスタンスからアクセスするよりもクラス名からアクセスする方が、より明確でわかりやすいからです。
class Person {
private static nextId = 1;
public static getNextId(): number {
return this.nextId++;
}
}
const nextPersonId = Person.this.getNextId(); // 推奨されない方法
console.log(nextPersonId); // 2
ジェネリック型パラメータ
ジェネリック型パラメータを使用して、静的メソッドを含むクラスの種類を指定できます。これは、コードをより柔軟で再利用しやすくするのに役立ちます。
class Person<T> {
private static nextId = 1;
public static getNextId(): number {
return this.nextId++;
}
}
const nextPersonId = Person<Person>.getNextId(); // ジェネリック型パラメータを使用
console.log(nextPersonId); // 2
typescript