Construyendo una CLI de lista de tareas con TypeScript — interfaz, métodos de array y Jest

Construye una CLI de tareas en TypeScript: interfaces, arrays y Jest

30 may 2026 • 4 min read • Q2BSTUDIO Team

Construye una CLI de tareas en TypeScript: interfaces, arrays y Jest

Al emprender el desarrollo de una interfaz de línea de comandos (CLI) para la gestión de tareas con TypeScript, nos encontramos con un escenario ideal para explorar la intersección entre tipado estático, programación funcional y pruebas unitarias. La elección de TypeScript no es casual: su sistema de tipos permite modelar con precisión las estructuras de datos, mientras que el entorno Node.js proporciona acceso directo a módulos como readline para la interacción asíncrona. Este proyecto, aunque aparentemente sencillo, sirve como banco de pruebas para conceptos que trascienden el ámbito académico y se aplican directamente en el desarrollo de aplicaciones a medida profesionales.

Uno de los primeros desafíos consiste en definir correctamente las entidades del dominio. En TypeScript, la palabra clave interface permite describir la forma de un objeto de manera similar a cómo un POJO (Plain Old Java Object) se declara en Java. Al separar la lógica de negocio de la interacción con el usuario, se obtiene un código más mantenible y testeable. Por ejemplo, un elemento de la lista de tareas debe contener un identificador numérico, un título, una prioridad (alta, media, baja) y un estado de finalización. La prioridad, al ser un conjunto cerrado de valores, se modela eficazmente como un tipo unión (type), lo que permite al compilador verificar que solo se usen opciones válidas. Esta técnica de modelado es fundamental cuando se construye software a medida, ya que reduce errores en tiempo de ejecución y documenta la intención del código.

La manipulación de la lista de tareas se realiza mediante métodos de array como filter, map, reduce y some. Quien provenga del ecosistema Java reconocerá de inmediato la semejanza con las operaciones de Stream API. filter permite excluir elementos sin mutar el array original, map transforma cada elemento devolviendo un nuevo array, reduce condensa la colección en un solo valor (por ejemplo, para calcular el máximo ID), y some verifica si al menos un elemento cumple una condición. Adoptar un estilo inmutable, donde las funciones devuelven una nueva copia del array en lugar de modificar el existente, mejora la previsibilidad y facilita la depuración. Este principio es especialmente relevante al integrar servicios inteligencia de negocio o Power BI, donde la integridad de los datos es crítica.

La inmutabilidad se extiende a la actualización de objetos individuales. En lugar de asignar directamente item.completed = true, se crea un nuevo objeto usando el operador spread ({ ...item, completed: !item.completed }). Este patrón, común en frameworks como React, evita efectos secundarios y simplifica las pruebas unitarias. Al mantener las funciones puras, cualquier cambio en el estado queda explícito en el valor de retorno, lo que permite implementar lógica de agentes IA o flujos de automatización sin temor a mutaciones ocultas.

El bucle principal de la CLI se apoya en el módulo readline de Node.js. La función rl.question es asíncrona: registra un callback y continúa la ejecución inmediatamente. Para mantener el menú activo hasta que el usuario decida salir, es necesario invocar recursivamente la función principal dentro del callback. Esta dinámica, que puede resultar sorprendente para quienes vienen de lenguajes síncronos como Java, refleja el modelo de concurrencia basado en eventos de JavaScript. Gestionar correctamente los flujos asíncronos es una habilidad indispensable en el desarrollo de aplicaciones a medida que interactúan con servicios cloud aws y azure, donde las operaciones de red y lectura de archivos son comunes.

Las pruebas unitarias con Jest y ts-jest garantizan que cada función se comporte según lo esperado. El uso de beforeEach reinicia el estado antes de cada test, imitando la anotación @BeforeEach de JUnit. De esta manera se evita la contaminación entre casos de prueba y se asegura que cada uno parta de un escenario controlado. Las aserciones cubren no solo la corrección funcional (como el incremento del contador o el cambio de estado), sino también propiedades inmutables: después de una eliminación, el array original debe permanecer intacto. Esta rigurosidad es la base de un software a medida robusto, capaz de soportar ia para empresas o sistemas de ciberseguridad que requieren alta fiabilidad.

Entre los errores más comunes que se descubren al construir esta CLI destacan la generación de identificadores basada en la longitud del array (que falla tras una eliminación) y la colocación incorrecta de la llamada recursiva fuera del callback. La detección temprana de estos fallos se debe precisamente a la existencia de pruebas específicas. Invertir tiempo en diseñar casos de prueba desde el principio, aunque el proyecto sea pequeño, es una inversión que se amortiza cuando el sistema crece o cuando se integran servicios inteligencia de negocio que dependen de datos limpios.

En definitiva, este ejercicio muestra que incluso una herramienta de línea de comandos simple puede servir como laboratorio para dominar conceptos avanzados de TypeScript: interfaces, tipos unión, métodos de array inmutables, asincronía y testing. Estas habilidades se trasladan directamente al desarrollo de sistemas complejos, como plataformas de inteligencia artificial o paneles de Power BI que consumen webservices construidos con TypeScript. Al mantener un enfoque basado en componentes atómicos y funciones puras, se facilita la extensibilidad y la colaboración en equipo, dos pilares de cualquier proyecto de software a medida exitoso.

A BREAK?

Play for a moment before you go

OUR SERVICES

How we can help you

Artificial intelligence

AI agents, chatbots, and intelligent assistants that automate tasks and serve your customers 24/7 to improve the efficiency of your business.

More info

Software Development

Web, mobile, and desktop applications, intranets, e-commerce, SaaS, and management platforms designed for your company's specific needs.

More info

Cloud services

Migration, infrastructure, managed hosting, high availability, and security on Microsoft Azure and Amazon Web Services to help your business scale without limits.

More info

Cybersecurity and pentesting

Security audits, penetration testing and protection of applications, data and infrastructure on-premise and cloud, with ethical hacking and regulatory compliance.

More info

Business Intelligence

Dashboards and data analysis with Power BI: we integrate your sources, design dashboards and KPIs and turn your data into decisions.

More info

Process automation

We automate repetitive tasks and connect your applications with n8n, Power Automate, Make, and RPA, eliminating manual work and increasing productivity.

More info

Training for Companies

We train your teams in technology with criteria: web development, databases, Git, best practices and security, automation with n8n, artificial intelligence for companies and creation of AI solutions with Azure AI Foundry.

More info

Code Auditing

We audit the code that you, your team or an AI create: we tell you what is good and what to improve, we secure it and make it ready for production, web or app.

More info

AI Image Generation

We create for you the images that your business needs with artificial intelligence: product, networks, advertising, illustration and avatars. You tell us what you want and we deliver it ready to use.

More info

AI Video Generation

We create videos with artificial intelligence for you: promotional, networking, virtual presenters, dubbing and animations. You tell us the idea and we will deliver it assembled and ready to publish.

More info

AI Conversational Avatars

We create conversational avatars with AI – digital humans with a face and voice – that serve your customers and teams with the knowledge of your company, on your website, interactive monitors, WhatsApp or Teams.

More info

Online Marketing and AI

Google Ads, Meta Ads, LinkedIn Ads and AI Engine Positioning (GEO/AEO): we attract customers and make your brand appear where they search for you, also on ChatGPT, Gemini and Perplexity.

More info

Do you have a project in mind?

Tell us your vision and we'll turn it into a software solution. Whatever the scope, we make your idea real.

Live Chat