静的フィールド (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のような静的フィールドの機能がありません。代わりに、クラスのプロパティに後から値を代入することで似たようなことができます。
JavaScriptjs
classSomeClass {}SomeClass .field = 123;console .log (SomeClass .field );
JavaScriptjs
classSomeClass {}SomeClass .field = 123;console .log (SomeClass .field );
TypeScriptでは、Java風の静的フィールドの書き方ができるようになっています。TypeScriptで静的フィールドを宣言するにはstaticキーワードを用います。
TypeScriptts
classSomeClass {staticfield : number = 123;}console .log (SomeClass .field );
TypeScriptts
classSomeClass {staticfield : number = 123;}console .log (SomeClass .field );
静的フィールドの型推論
TypeScriptの静的フィールドは初期値がセットされている場合、その初期値からフィールドの型が型推論されます。そのため、フィールドの型注釈が省略できます。
ts
classSomeClass {staticfield = 123;}
ts
classSomeClass {staticfield = 123;}
静的フィールドとアクセス修飾子
TypeScriptの静的フィールドはアクセス修飾子を組み合わせられます。
ts
classSomeClass {private staticfield : number;}
ts
classSomeClass {private staticfield : number;}
📄️ アクセス修飾子
JavaやPHPなどの言語では、フィールドやメソッドにprivate, protected, publicを指定できます。JavaScriptでもprivateのようなプロパティを実現するためにプライベートクラスフィールドという仕様がありますが、Javaのようなアクセス修飾子とはやや様相が異なります。TypeScriptにはJava風のアクセス修飾子があります。
読み取り専用の静的フィールド
TypeScriptの静的フィールドはreadonly修飾子をつけると読み取り専用になります。
ts
classSomeClass {static readonlyfield : number;}
ts
classSomeClass {static readonlyfield : number;}
📄️ クラスのreadonly修飾子
TypeScriptでは、フィールドにreadonly修飾子をつけると、そのフィールドを読み取り専用にできます。