Ejercicio de programación con TypeScript: Proyecto Minigestor de tareas

Proyecto
Práctica
3h 0m

Desarrolla un minigestor de tareas en TypeScript con CRUD, filtrado, validación y persistencia local para mejorar tus habilidades OOP.

  1. Crea la estructura inicial del proyecto con los siguientes archivos:
  • models/Task.ts: Define la interfaz ITask y la clase Task
  • services/TaskManager.ts: Implementa la clase principal que gestionará las operaciones
  • services/StorageService.ts: Servicio para la persistencia de datos
  • utils/validators.ts: Funciones de validación
  • index.ts: Punto de entrada para probar la aplicación
  1. Define la interfaz ITask en el archivo models/Task.ts con las siguientes propiedades:
  • id: string (identificador único)
  • title: string (obligatorio)
  • description: string (opcional)
  • dueDate: Date (opcional)
  • priority: enum (Low, Medium, High)
  • status: enum (Pending, InProgress, Completed)
  • createdAt: Date (automático)
  • updatedAt: Date (automático)
  1. Implementa la clase Task que implemente la interfaz ITask con un constructor que valide los datos de entrada y genere un ID único para cada tarea.

  2. Crea el servicio de almacenamiento StorageService con métodos para:

  • Guardar datos en localStorage
  • Recuperar datos de localStorage
  • Implementa métodos genéricos usando tipos genéricos de TypeScript
  1. Desarrolla la clase TaskManager con los siguientes métodos:
  • addTask(task: Partial<ITask>): Task: Crea una nueva tarea
  • getTasks(): Task[]: Obtiene todas las tareas
  • getTaskById(id: string): Task | undefined: Busca una tarea por ID
  • updateTask(id: string, data: Partial<ITask>): Task: Actualiza una tarea existente
  • deleteTask(id: string): boolean: Elimina una tarea
  • filterTasks(criteria: {status?: TaskStatus, priority?: TaskPriority}): Task[]: Filtra tareas por criterios
  1. Implementa validaciones en el archivo utils/validators.ts para:
  • Verificar que el título no esté vacío
  • Validar que la fecha límite sea posterior a la fecha actual
  • Comprobar que los valores de prioridad y estado sean válidos
  1. Añade manejo de errores personalizado creando una clase TaskError que extienda de Error y úsala en los métodos del gestor para manejar casos como:
  • Tarea no encontrada
  • Datos inválidos
  • Errores de almacenamiento
  1. Implementa la persistencia de datos en TaskManager utilizando el StorageService para guardar y recuperar las tareas automáticamente.

  2. En el archivo index.ts, crea un ejemplo de uso que demuestre todas las funcionalidades implementadas: crear varias tareas, actualizarlas, eliminar alguna, y mostrar resultados de filtrado.

  3. Mejora la implementación añadiendo métodos para estadísticas como:

  • Número de tareas por estado
  • Tareas próximas a vencer (en los próximos 3 días)
  • Tareas retrasadas (fecha límite pasada)
Empezar ejercicio de programación

Más ejercicios de programación con TypeScript

Evalúa tus conocimientos en TypeScript con más ejercicios de programación de tipo Test, Puzzle, Código y Proyecto con VSCode.

Tecnologías de este ejercicio de programación

Entornos de desarrollo para este ejercicio

Image

Visual Studio Code

Image

GitHub