Deja que TypeScript deduzca los tipos con la inferencia, y comprende por qué unknown supera al peligroso any.
Abrir esta lección en KodokonBuenas 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.
let city = "Lyon"; // inferred type: string
let count = 3; // inferred type: number
count = count + 1; // accepted
// city = 42; -> error: city is still a stringEl 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.
let data: any = "hello";
data = 42; // accepted without complaint
// Compiles, but crashes at runtime:
// data.toUpperCase() does not exist on a number!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.
let value: unknown = "hello";
// console.log(value.toUpperCase()); -> rejected!
if (typeof value === "string") {
console.log(value.toUpperCase()); // "HELLO"
}