Saltar al contenido
webtype.orgwebtype.orgtsconfig

    ↑↓ mover · ⏎ abrir · esc cerrar

    tsconfig

    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": false
    export class Session {
      token: string
    }

    Compila limpio

    Con ella encendida

    "strictPropertyInitialization": true
    export 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