TypeScript cuenta con un potente sistema de inferencia de tipos. En la mayoría de los casos, los tipos de las variables, parámetros y valores de retorno se calculan automáticamente según el contexto. Hay varios niveles de inferencia de tipos:
Ejemplos:
let a = 2; // number let b = [1, "a"]; // (number | string)[] window.addEventListener('click', e => { // e: MouseEvent });
Restricción: si el compilador no puede inferir el tipo de manera clara, elegirá el más amplio (generalmente any), lo que elimina las ventajas de la tipificación.
¿Se tipifica el argumento de una función si no se especifica explícitamente, pero la función se utiliza más adelante con un valor tipificado?
Respuesta incorrecta: Sí, TypeScript siempre "adivinará" automáticamente el tipo del argumento.
Respuesta correcta: No. Solo si el contexto de la función contiene información sobre el tipo, el argumento obtendrá un tipo. De lo contrario, será any u otro tipo base, lo que llevará a errores. Siempre es recomendable tipificar explícitamente los datos de entrada.
Ejemplo:
function f(x) { return x.toFixed(2); // Error: x es del tipo any }
Historia
En un proyecto no se especificó explícitamente el tipo de retorno de un hook personalizado de React, y TypeScript no vio que el tipo podía ser
undefined. Como resultado, la llamada a un método del objeto sin comprobación llevó a errores en tiempo de ejecución.
Historia
Al crear un array de valores de tipo mixto, el tipo final se inferió automáticamente como un array
any[]porque no se había especificado un tipo explícitamente, lo que llevó a la pérdida de todas las ventajas de la tipificación en el código siguiente.
Historia
La validación de los parámetros de entrada del servicio no estaba tipificada y se basaba en la "adivinanza" de TypeScript. Después de refactorizar el codebase, la inferencia automática dio un tipo demasiado general, y los errores de tipos de datos llegaron a producción.