strictPropertyInitialization
リリースされたバージョン: 2.7
このオプションを有効にするためには strictNullChecks
も同様に有効にする必要があります。
クラスのプロパティは初期化しない状態では undefined
が格納されます。
typescript
class User {public name: string;public gender: string;public age: number;}const user: User = new User();console.log(user.name);// -> undefinedconsole.log(user.gender);// -> undefinedconsole.log(user.age);// -> undefined
typescript
class User {public name: string;public gender: string;public age: number;}const user: User = new User();console.log(user.name);// -> undefinedconsole.log(user.gender);// -> undefinedconsole.log(user.age);// -> undefined
これはクラスの宣言時に、コンストラクタで各プロパティが初期化されていないためです。
このオプションを有効にすると宣言されたプロパティは undefined
とのユニオン型またはオプション修飾子がついている場合を除いて必ずコンストラクタの呼び出しの時点で初期化をする必要があります。
typescript
class User {public name: string | undefined;public gender?: string;public age: number;}const user: User = new User();
typescript
class User {public name: string | undefined;public gender?: string;public age: number;}const user: User = new User();
text
error TS2564: Property 'age' has no initializer and is not definitely assigned in the constructor. public age: number; ~~~
text
error TS2564: Property 'age' has no initializer and is not definitely assigned in the constructor. public age: number; ~~~
これを回避するためにはコンストラクタで初期化するか、初期値を設定します。
typescript
class User {public name: string | undefined;public gender?: string;public age: number;public constructor(age: number) {this.age = age;}}
typescript
class User {public name: string | undefined;public gender?: string;public age: number;public constructor(age: number) {this.age = age;}}
typescript
class User {public name: string | undefined;public gender?: string;public age: number = 100;}
typescript
class User {public name: string | undefined;public gender?: string;public age: number = 100;}