TypeScriptでクラス定数を実装する方法
クラス定数は、クラス内で定義される不変の値です。一度定義されたら変更できません。
constキーワードの使用
最も一般的な方法は、const
キーワードを使用することです。
class MyClass {
static readonly PI = 3.14159;
static readonly MAX_VALUE = 100;
}
readonly
キーワードは、値が読み取り専用であることを示します。static
キーワードは、クラスのメンバーであることを示します。
enumの使用
定数のセットを定義する場合には、enum
を使用することもできます。
enum Colors {
RED,
GREEN,
BLUE
}
readonlyインターフェースの使用
インターフェースを使用して、定数の型を定義し、クラスで実装することができます。
interface IConstants {
readonly PI: number;
readonly MAX_VALUE: number;
}
class MyClass implements IConstants {
readonly PI = 3.14159;
readonly MAX_VALUE = 100;
}
readonlyプロパティの使用
クラスのインスタンスレベルで定数を定義する場合には、readonly
プロパティを使用します。
class MyClass {
readonly name: string;
constructor(name: string) {
this.name = name;
}
}
注意
- クラス定数の値を変更することはできません。変更が必要な場合は、新しい定数を定義してください。
- クラス定数は、クラスのインスタンスに依存しないため、クラスのすべてのインスタンスで同じ値を持ちます。
constキーワードを使用したクラス定数
class MyClass {
static readonly PI = 3.14159;
static readonly MAX_VALUE = 100;
}
// クラス定数の使用
console.log(MyClass.PI); // 出力: 3.14159
console.log(MyClass.MAX_VALUE); // 出力: 100
enumを使用したクラス定数
enum Colors {
RED,
GREEN,
BLUE
}
// クラス定数の使用
console.log(Colors.RED); // 出力: 0
console.log(Colors.GREEN); // 出力: 1
console.log(Colors.BLUE); // 出力: 2
interface IConstants {
readonly PI: number;
readonly MAX_VALUE: number;
}
class MyClass implements IConstants {
readonly PI = 3.14159;
readonly MAX_VALUE = 100;
}
// クラス定数の使用
console.log(MyClass.PI); // 出力: 3.14159
console.log(MyClass.MAX_VALUE); // 出力: 100
readonlyプロパティを使用したクラス定数
class MyClass {
readonly name: string;
constructor(name: string) {
this.name = name;
}
}
// クラス定数の使用
const myClass = new MyClass("John Doe");
console.log(myClass.name); // 出力: John Doe
- 欠点
値を変更できない。 - 利点
シンプルで直感的。
- 欠点
定数の値は数値型であり、変更できない。 - 利点
定数のセットを定義でき、数値や文字列を関連付けられる。
- 欠点
インターフェースを実装する必要がある。 - 利点
型安全で、クラスのメンバーを定義する際にインターフェースを使用できる。
- 欠点
クラスのインスタンスごとに定数の値が異なる。 - 利点
インスタンスレベルで定数を定義できる。
ユーティリティ関数を使用したクラス定数
- 欠点
関数を呼び出す必要がある。 - 利点
定数の定義と使用を分離できる。
function createConstant(value: any) {
return () => value;
}
const PI = createConstant(3.14159);
const MAX_VALUE = createConstant(100);
// クラス定数の使用
console.log(PI()); // 出力: 3.14159
console.log(MAX_VALUE()); // 出力: 100
Symbolを使用したクラス定数
- 利点
唯一無二の識別子を生成できる。
const PI_SYMBOL = Symbol('PI');
const MAX_VALUE_SYMBOL = Symbol('MAX_VALUE');
class MyClass {
[PI_SYMBOL] = 3.14159;
[MAX_VALUE_SYMBOL] = 100;
}
// クラス定数の使用
const myClass = new MyClass();
console.log(myClass[PI_SYMBOL]); // 出力: 3.14159
console.log(myClass[MAX_VALUE_SYMBOL]); // 出力: 100
typescript class-constants