Saltar al contenido

    ↑↓ mover · ⏎ abrir · esc cerrar

    TS18048

    Posiblemente undefined

    'maybe.a' is possibly 'undefined'.

    Las palabras del propio compilador. Sin traducir — es la cadena que pegaste en el buscador.

    Se usó una propiedad opcional sin comprobarla. Bajo `strictNullChecks`, «opcional» significa que la ausencia forma parte del tipo y hay que gestionarla.

    Reproducción

    declare const maybe: { a?: { b: number } }
    
    maybe.a.b

    La compilación afirma que esto emite exactamente este código.

    Por qué lo dice el compilador

    Sin `strictNullChecks` esto compila y revienta en tiempo de ejecución; con él, el hueco se hace visible donde todavía puede arreglarse. El error no te pide demostrar que el valor existe — te pide decir qué debe pasar cuando no existe, una pregunta que el código respondía en silencio con «fallar».

    Arreglos

    1. 01
      declare const maybe: { a?: { b: number } }
      
      const value = maybe.a?.b

      El encadenamiento opcional responde «no pasa nada, el resultado es `undefined`» — lo cual es correcto cuando quien llama puede vivir con eso.

    2. 02
      declare const maybe: { a?: { b: number } }
      
      if (maybe.a) {
        const value = maybe.a.b
      }

      Una guarda responde «en ese caso no hacemos nada», y acota el tipo para todo el bloque en vez de para un solo acceso.

    Conclusión

    La aserción no-nula `!` también silencia esto, y es el único arreglo que responde la pregunta con una promesa en vez de con código. Resérvala para los casos que de verdad puedas demostrar.

    Adónde ir después

    Errores