Void y Undefined en TypeScript: Ejecución y Compilación Explicadas

Introducción: cuando una función en TypeScript no devuelve nada, aparece una duda común: en tiempo de ejecución JavaScript devuelve undefined mientras que en tiempo de compilación TypeScript muestra void. Vamos a explicar por qué no son contradictorios sino dos capas distintas del mismo comportamiento.
Perspectiva en tiempo de ejecución JavaScript: JavaScript no tiene un tipo void como tal. Toda llamada a función produce un valor. Si no se hace un return explícito, el valor devuelto en tiempo de ejecución es undefined. En la práctica esto significa que una función que solo realiza efectos secundarios como mostrar en consola terminará evaluando a undefined cuando se invoque.
Perspectiva en tiempo de compilación TypeScript: TypeScript no ejecuta el código, describe intenciones y contratos durante la compilación. Cuando una función no retorna nada, TypeScript marca su tipo de retorno como void. Ese void indica a otros desarrolladores y al compilador que no deben depender ni usar ningún valor de retorno. El tipo void es una abstracción de compilación, mientras que undefined es el valor real en ejecución.
Por qué no usar undefined como tipo por defecto: si declaras el tipo de retorno como undefined, TypeScript espera que la función haga un return undefined explícito. Ese requisito es más estricto y rara vez deseado cuando la intención es simplemente indicar ausencia de valor útil. Por eso la convención es usar void para funciones sin valor de retorno significativo.
Funciones async: la regla se extiende a funciones asíncronas. Una async function que no devuelve nada en código sin return explícito produce en tiempo de ejecución una promesa que se resuelve con undefined. En tiempo de compilación TypeScript mostrará el tipo Promise con void como parámetro de tipo, indicando que la promesa no contiene un valor útil al resolverse.
Ejemplo práctico: imaginemos una función logger que escribe mensajes en consola y otra función asíncrona saveData que espera y luego llama al logger. En tiempo de ejecución logger devuelve undefined y saveData resuelve su promesa con undefined. En tiempo de compilación TypeScript mostrará void y Promise de void respectivamente, comunicando que esos retornos no deben usarse.
Conclusiones clave: en tiempo de ejecución con JavaScript las funciones sin return devuelven undefined; en tiempo de compilación TypeScript usa void para señalar que no hay un valor útil que consumir. Usar undefined como tipo exige un return undefined explícito y por tanto es demasiado estricto en la mayoría de los casos. Regla práctica: utiliza void para funciones que no deben devolver nada.
Sobre Q2BSTUDIO: en Q2BSTUDIO somos una empresa de desarrollo de software y aplicaciones a medida especializada en soluciones integrales para empresas, incluyendo inteligencia artificial, ciberseguridad y servicios cloud AWS y Azure. Ofrecemos desarrollo de aplicaciones a medida y software a medida adaptado a procesos específicos del cliente y también implementamos soluciones de IA para empresas y agentes IA que optimizan flujos y toma de decisiones. Si necesitas desarrollar una aplicación personalizada, conoce nuestro servicio de Desarrollo de aplicaciones y software a medida y si buscas potenciar tus procesos con modelos y automatizaciones visita nuestras Soluciones de inteligencia artificial. También ofrecemos servicios de ciberseguridad y pentesting, servicios inteligencia de negocio y power bi, servicios cloud aws y azure, y automatización de procesos para impulsar la eficiencia y seguridad de tu organización.
Palabras clave: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi.
Si quieres más ejemplos concretos o una auditoría de arquitectura para tu proyecto, en Q2BSTUDIO podemos ayudarte a elegir entre diseño de API, gestión de tipos en TypeScript y despliegue en la nube para que tu código sea claro, seguro y escalable.
Comentarios