While looking through some TypeScript 2.7 samples, I noticed the following syntax: class User { // Notice the exclamation mark username!: string ; constructor(username: string) { this.initialize(username); } private initialize(username: string) { this.username = username; } }
This syntax comes into play when you use another TypeScript 2.7 compiler option; strict property initialization. If the --strictPropertyInitialization flag is enabled, the type checker verifies that each instance property declared in a class either
has a type that includes undefined ,
has an explicit initializer
is initialized within the constructor
This is problematic if you want to initialize a property within a helper method or have a dependency injection framework do it for you. To solve this situation you can use a definite assignment assertion using the exclamation mark: (!) . Now the type checker will no longer complain.
Remar