Menu
Coddy logo textTech

Poniéndolo todo junto

Parte de la sección Introducción a TypeScript del Journey de JavaScript de Coddy. Lección 50 de 73.

challenge icon

Desafío

Fácil

Se te proporciona lo siguiente del desafío anterior:

  • La interfaz Task con id (número), title (cadena) y status (tipo literal)
  • Tres variables de tareas: firstTask, secondTask y thirdTask
  • La función getTaskInfo
  • La función addTask
  • La función changeTaskStatus
  • La función listTasksByStatus
  • La función printTaskSummary
  • La función printAllTaskSummaries
  • Todos los arrays de tareas: initialTasks, updatedTasks, testTasks, progressTasks, completedTasks, mixedTasks, todoTasks, inProgressTasks, doneTasks y sampleTasks

Crea un flujo de trabajo integral de gestión de tareas que demuestre toda la funcionalidad que has creado:

Crea una variable llamada projectTasks de tipo Task[] que contenga estas tareas iniciales:

  • Una tarea con id 201, título "Setup development environment" y estado 'done'
  • Una tarea con id 202, título "Create project structure" y estado 'todo'

Realiza las siguientes operaciones en secuencia:

  1. Usa addTask para añadir una nueva tarea con el título "Write documentation" a projectTasks y guarda el resultado en expandedTasks
  2. Usa changeTaskStatus para cambiar el estado de la tarea con ID 202 a 'in-progress' en expandedTasks y guarda el resultado en updatedProjectTasks
  3. Usa changeTaskStatus para cambiar el estado de la tarea recién añadida (ID 3) a 'done' en updatedProjectTasks y guarda el resultado en finalTasks
  4. Usa listTasksByStatus para filtrar finalTasks por el estado 'done' y guarda el resultado en completedProjectTasks

Imprime los siguientes resultados en líneas separadas:

  • Imprime la longitud de projectTasks
  • Imprime la longitud de finalTasks
  • Imprime la longitud de completedProjectTasks
  • Llama a printTaskSummary con la primera tarea de completedProjectTasks
  • Llama a printTaskSummary con la última tarea de completedProjectTasks
  • Llama a printAllTaskSummaries con finalTasks
FORMATO DE SALIDA OBLIGATORIO: [Tu contenido traducido aquí]

Pruébalo tú mismo

// Task interface and existing code from previous challenges
interface Task {
    id: number;
    title: string;
    status: 'todo' | 'in-progress' | 'done';
}

const firstTask: Task = {
  id: 1,
  title: "Learn TypeScript interfaces",
  status: "todo"
};

const secondTask: Task = {
  id: 2,
  title: "Build task management app",
  status: "in-progress"
};

const thirdTask: Task = {
  id: 3,
  title: "Write unit tests",
  status: "done"
};

function getTaskInfo(task: Task): string {
    return `Task ${task.id}: ${task.title} - ${task.status}`;
}

function addTask(taskList: Task[], title: string): Task[] {
  const newTask: Task = {
    id: taskList.length + 1,
    title: title,
    status: 'todo'
  };
  return [...taskList, newTask];
}

function changeTaskStatus(taskList: Task[], taskId: number, newStatus: 'todo' | 'in-progress' | 'done'): Task[] {
  return taskList.map(task => 
    task.id === taskId ? { ...task, status: newStatus } : task
  );
}

function listTasksByStatus(tasks: Task[], status: 'todo' | 'in-progress' | 'done'): Task[] {
    return tasks.filter(task => task.status === status);
}

const initialTasks: Task[] = [firstTask, secondTask];
const updatedTasks: Task[] = addTask(initialTasks, "Review code changes");
const testTasks: Task[] = [firstTask, secondTask, thirdTask];
const progressTasks = changeTaskStatus(testTasks, 1, 'in-progress');
const completedTasks = changeTaskStatus(progressTasks, 2, 'done');
const mixedTasks: Task[] = [firstTask, secondTask, thirdTask];

const todoTasks = listTasksByStatus(mixedTasks, 'todo');
const inProgressTasks = listTasksByStatus(mixedTasks, 'in-progress');
const doneTasks = listTasksByStatus(mixedTasks, 'done');

function printTaskSummary(task: Task): void {
    console.log(`ID: ${task.id}, Title: ${task.title}, Status: ${task.status}`);
}

function printAllTaskSummaries(taskList: Task[]): void {
    for (let task of taskList) {
        printTaskSummary(task);
    }
}

const sampleTasks: Task[] = [
    { id: 101, title: "Design user interface", status: 'todo' },
    { id: 102, title: "Implement authentication", status: 'in-progress' },
    { id: 103, title: "Deploy to production", status: 'done' }
];

printTaskSummary(firstTask);
printTaskSummary(sampleTasks[1]);
printAllTaskSummaries(sampleTasks);
printTaskSummary(doneTasks[doneTasks.length - 1]);

Todas las lecciones de Introducción a TypeScript

Practica por tu cuenta: Compilador de JavaScript online