Kodokon kodokon.com

Inferencia, any y unknown

Deja que TypeScript deduzca los tipos con la inferencia, y comprende por qué unknown supera al peligroso any.

8 min · 3 preguntas

Abrir esta lección en Kodokon

Buenas noticias: no tienes que anotar cada variable. Gracias a la inferencia de tipos, TypeScript deduce el tipo de una variable a partir del valor que le das. Escribir let city = "Lyon" es suficiente: TypeScript sabe que city es un string y la protege como si la hubieras anotado.

TYPESCRIPT
let city = "Lyon"; // inferred type: string
let count = 3;     // inferred type: number

count = count + 1; // accepted
// city = 42; -> error: city is still a string
Sin anotaciones, y aun así los tipos están todos ahí.

El tipo any significa «cualquier cosa». Una variable any escapa a todas las comprobaciones: TypeScript lo acepta todo, sin verificar. Es como quitarte el cinturón de seguridad: el código compila, pero los errores vuelven en tiempo de ejecución, exactamente lo que TypeScript debía evitar.

TYPESCRIPT
let data: any = "hello";
data = 42; // accepted without complaint

// Compiles, but crashes at runtime:
// data.toUpperCase() does not exist on a number!
Con any, TypeScript mira hacia otro lado.

Para un valor cuyo tipo es realmente desconocido (una respuesta de servidor, una entrada de usuario), prefiere unknown. Como any, acepta cualquier valor, pero te obliga a comprobar el tipo (por ejemplo con typeof) antes de usarlo. Así, la seguridad permanece intacta.

TYPESCRIPT
let value: unknown = "hello";

// console.log(value.toUpperCase()); -> rejected!

if (typeof value === "string") {
  console.log(value.toUpperCase()); // "HELLO"
}
unknown requiere una comprobación antes de usarlo.

Prueba de conocimientos

Comprueba que has retenido los puntos clave de esta lección.

  1. ¿Qué es la inferencia de tipos?
    • TypeScript deduce el tipo a partir del valor inicial
    • TypeScript elimina los tipos del programa
    • TypeScript convierte los números en textos
  2. ¿Por qué se debe evitar any en la medida de lo posible?
    • Ralentiza el programa
    • Desactiva las comprobaciones de TypeScript
    • Está prohibido por el lenguaje
    • Solo funciona con números
  3. ¿Qué debes hacer antes de usar un valor de tipo unknown?
    • Comprobar su tipo, por ejemplo con typeof
    • Convertirlo a any
    • Declararlo una segunda vez