静的フィールド (static field)
JavaやPHPには静的フィールド(static field)という概念があります。通常のフィールドはインスタンスのプロパティですが、静的フィールドはクラスのプロパティです。JavaやPHPではstaticキーワードで静的フィールドを宣言できます。
Javajava
class SomeClass {public static Integer field = 123;}class Main {public static void main(String[] args) {System.out.println(SomeClass.field); //=> 123}}
Javajava
class SomeClass {public static Integer field = 123;}class Main {public static void main(String[] args) {System.out.println(SomeClass.field); //=> 123}}
PHPphp
class SomeClass{public static $field = 123;}var_dump(SomeClass::$field); //=> int(123)
PHPphp
class SomeClass{public static $field = 123;}var_dump(SomeClass::$field); //=> int(123)
JavaScriptにはJavaのような静的フィールドの機能がありません。代わりに、クラスのプロパティに後から値を代入することで似たようなことができます。
JavaScriptjavascript
class SomeClass {}SomeClass.field = 123;console.log(SomeClass.field); //=> 123
JavaScriptjavascript
class SomeClass {}SomeClass.field = 123;console.log(SomeClass.field); //=> 123
TypeScriptでは、Java風の静的フィールドの書き方ができるようになっています。TypeScriptで静的フィールドを宣言するにはstaticキーワードを用います。
TypeScripttypescript
class SomeClass {static field: number = 123;}console.log(SomeClass.field); //=> 123
TypeScripttypescript
class SomeClass {static field: number = 123;}console.log(SomeClass.field); //=> 123
#
静的フィールドの型推論TypeScriptの静的フィールドは初期値がセットされている場合、その初期値からフィールドの型が型推論されます。そのため、フィールドの型注釈が省略できます。
typescript
class SomeClass {static field = 123;}
typescript
class SomeClass {static field = 123;}
#
静的フィールドとアクセス修飾子TypeScriptの静的フィールドはアクセス修飾子を組み合わせられます。
typescript
class SomeClass {private static field: number;}
typescript
class SomeClass {private static field: number;}
#
読み取り専用の静的フィールドTypeScriptの静的フィールドはreadonly修飾子をつけると読み取り専用になります。
typescript
class SomeClass {static readonly field: number;}
typescript
class SomeClass {static readonly field: number;}