Saltar al contenido

    ↑↓ mover · ⏎ abrir · esc cerrar

    TS18046

    Es unknown

    'value' is of type 'unknown'.

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

    `unknown` es el tipo que se niega a ser usado hasta que demuestres qué es. Esa negativa es toda la característica.

    Reproducción

    declare const value: unknown
    
    value.trim()

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

    Por qué lo dice el compilador

    `any` dice «deja de comprobar»; `unknown` dice «comprueba primero». Ocupan el mismo lugar en la jerarquía — todo es asignable a ambos — pero `unknown` no es asignable a nada sin un paso de acotado. Este error no es un obstáculo que rodear con un cast: es el tipo haciendo la única pregunta que siempre debería hacérsele a un valor que viene de fuera de tu programa.

    Arreglos

    1. 01
      declare const value: unknown
      
      if (typeof value === 'string') {
        value.trim()
      }

      Acótalo. Dentro de la guarda el compilador sabe que es un `string`, y la llamada al método se comprueba como cualquier otra.

    2. 02
      function isString(input: unknown): input is string {
        return typeof input === 'string'
      }
      
      declare const value: unknown
      
      if (isString(value)) {
        value.trim()
      }

      O escribe la comprobación una vez como predicado de tipo y reutilízala. El tipo de retorno `input is string` es lo que convierte una función booleana en algo con lo que el compilador acota.

    Conclusión

    Recurre a `unknown` en cada frontera — JSON analizado, un error capturado, cualquier cosa de la red — y deja que este error fuerce la comprobación que te habrías saltado.

    Errores