strictPropertyInitialization
Un campo declarado tiene que asignarse
Declarar `token: string` dice que la propiedad es un string. Antes de esta bandera, nada comprobaba que llegara a serlo.
- Desde
- TypeScript 2.7
- strict
- En strict
- En tu tsconfig
"strictPropertyInitialization": true- Compilado con
"strict": true
El mismo fragmento las dos veces. Solo cambió la opción.
Con ella apagada
"strictPropertyInitialization": falseexport class Session { token: string }
Compila limpio
Con ella encendida
"strictPropertyInitialization": trueexport class Session { token: string }
Emite TS2564
Por qué al compilador le importa
El cuerpo de una clase es el único sitio de TypeScript donde la anotación de tipo y la asignación se escriben por separado, y en ese hueco vive un `undefined` que el tipo niega. La bandera lo cierra exigiendo un inicializador, una asignación en el constructor o la aserción de asignación definida `token!: string` —que eres tú asumiendo la responsabilidad en vez del compilador creyéndote—. Necesita `strictNullChecks`, porque sin él que la propiedad sea `undefined` ni siquiera es una contradicción.
Conclusión
`!` no es un arreglo. Es una nota que dice que tú lo comprobaste y el compilador no pudo.
Adónde ir después
22 opciones

