La inferencia de tipos es una característica poderosa de TypeScript que permite al compilador deducir automáticamente el tipo de una variable, función o expresión sin necesidad de que el programador lo especifique explícitamente. Esto hace que el código sea más conciso y legible, al tiempo que mantiene la seguridad de tipos.

Conceptos Clave

  1. Inferencia de Tipos en Variables: TypeScript puede inferir el tipo de una variable a partir del valor con el que se inicializa.
  2. Inferencia de Tipos en Funciones: TypeScript puede inferir el tipo de retorno de una función a partir de su cuerpo.
  3. Contextual Typing: TypeScript puede inferir tipos basándose en el contexto en el que se utiliza una expresión.

Inferencia de Tipos en Variables

Cuando declaramos una variable y la inicializamos con un valor, TypeScript infiere el tipo de la variable a partir del valor asignado.

let mensaje = "Hola, TypeScript!"; // TypeScript infiere que 'mensaje' es de tipo 'string'
let numero = 42; // TypeScript infiere que 'numero' es de tipo 'number'
let esVerdadero = true; // TypeScript infiere que 'esVerdadero' es de tipo 'boolean'

En estos ejemplos, no es necesario especificar explícitamente los tipos string, number o boolean porque TypeScript los infiere automáticamente.

Inferencia de Tipos en Funciones

TypeScript también puede inferir el tipo de retorno de una función basándose en el valor que la función devuelve.

function suma(a: number, b: number) {
    return a + b; // TypeScript infiere que el tipo de retorno es 'number'
}

let resultado = suma(5, 7); // 'resultado' es de tipo 'number'

En este caso, TypeScript infiere que el tipo de retorno de la función suma es number porque la expresión a + b es de tipo number.

Contextual Typing

El "contextual typing" ocurre cuando TypeScript infiere tipos basándose en el contexto en el que se utiliza una expresión. Esto es común en funciones de callback y en métodos de objetos.

const nombres = ["Alice", "Bob", "Charlie"];

nombres.forEach((nombre) => {
    console.log(nombre.toUpperCase()); // TypeScript infiere que 'nombre' es de tipo 'string'
});

En este ejemplo, TypeScript infiere que nombre es de tipo string porque nombres es un array de strings y el método forEach pasa cada elemento del array a la función de callback.

Ejercicios Prácticos

Ejercicio 1

Declara una variable edad e inicialízala con el valor 30. ¿Qué tipo infiere TypeScript para esta variable?

let edad = 30;

Solución: TypeScript infiere que edad es de tipo number.

Ejercicio 2

Escribe una función multiplica que tome dos parámetros a y b de tipo number y devuelva su producto. ¿Qué tipo infiere TypeScript para el valor de retorno?

function multiplica(a: number, b: number) {
    return a * b;
}

Solución: TypeScript infiere que el tipo de retorno de multiplica es number.

Ejercicio 3

Dado el siguiente array de números, usa el método map para crear un nuevo array donde cada número se multiplica por 2. ¿Qué tipo infiere TypeScript para los elementos del nuevo array?

const numeros = [1, 2, 3, 4, 5];
const dobles = numeros.map((numero) => numero * 2);

Solución: TypeScript infiere que los elementos de dobles son de tipo number.

Resumen

La inferencia de tipos en TypeScript permite escribir código más limpio y conciso sin sacrificar la seguridad de tipos. TypeScript puede inferir tipos en variables, funciones y basándose en el contexto en el que se utilizan las expresiones. Esta característica es especialmente útil para mantener el código legible y fácil de mantener.

En el próximo tema, exploraremos los Tipos Unión e Intersección, que nos permitirán trabajar con tipos más complejos y flexibles.

© Copyright 2024. Todos los derechos reservados