TypeScriptIntermedio9 oct 2025
¡El `void` que no era tan vacío! 🤯
snippet.typescript
type Callback = () => void;
function greetUser(): string {
console.log("¡Hola desde greetUser!");
return "👋 ¡Saludos!";
}
function processData(): number {
console.log("Procesando datos...");
return 42;
}
const myVoidCallback: Callback = greetUser; // WTF?!
const anotherVoidCallback: Callback = processData; // WTF AGAIN?!
console.log("Ejecutando myVoidCallback:");
const result1 = myVoidCallback();
console.log("Resultado de myVoidCallback:", result1);
console.log("\nEjecutando anotherVoidCallback:");
const result2 = anotherVoidCallback();
console.log("Resultado de anotherVoidCallback:", result2);¿Qué crees que imprime?
✅ Salida Esperada
Ejecutando myVoidCallback:
¡Hola desde greetUser!
Resultado de myVoidCallback: undefined
Ejecutando anotherVoidCallback:
Procesando datos...
Resultado de anotherVoidCallback: undefined⚠️ Salida Real
Ejecutando myVoidCallback:
¡Hola desde greetUser!
Resultado de myVoidCallback: 👋 ¡Saludos!
Ejecutando anotherVoidCallback:
Procesando datos...
Resultado de anotherVoidCallback: 42¿Por qué pasa esto?
¡Agárrense, porque el tipo `void` en TypeScript es más permisivo de lo que parece! 🤯
Cuando defines un tipo de función que retorna `void`, como `type Callback = () => void;`, no significa que la función *no pueda* retornar nada. Significa que **su valor de retorno debe ser ignorado** por el código que la llama. Es como decirle a un niño: "Puedes tener el juguete, pero no lo uses". 🤫
- Una función que retorna `string` (`greetUser`) o `number` (`processData`) es perfectamente asignable a un tipo `() => void`. TypeScript dice: "Ok, entiendo que esta función devuelve algo, pero el tipo `void` me indica que no debo preocuparme por ese valor de retorno".
- Cuando ejecutas `myVoidCallback()`, `greetUser()` se ejecuta y **su valor de retorno sigue ahí**, aunque el tipo `Callback` te hiciera pensar lo contrario.
- Esto es por **compatibilidad de asignación de funciones**. TypeScript permite que funciones con retornos más específicos (como `string` o `number`) sean asignadas a tipos de retorno `void` para escenarios comunes como callbacks. ¡El `void` no es un "no-retorno", sino un "ignora-el-retorno"! 🫠
Conceptos relacionados
type-systemfunction-assignabilityvoid-type