Menu
CoddyTech

Función: Listar tareas por estado

Parte de la sección Introducción a TypeScript del Journey de JavaScript de Coddy. Lección 48 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 tarea: firstTask, secondTask y thirdTask
  • La función getTaskInfo
  • La función addTask
  • La función changeTaskStatus
  • Los arreglos initialTasks, updatedTasks, testTasks, progressTasks y completedTasks

Crea una función llamada listTasksByStatus que reciba dos parámetros:

  • taskList de tipo Task[] (un arreglo de objetos Task)
  • status de tipo 'todo' | 'in-progress' | 'done' (el estado por el que se filtrará)

La función debe:

  • Usar el método de arreglo filter para devolver un nuevo arreglo que contenga únicamente las tareas que coincidan con el estado especificado
  • Devolver el arreglo filtrado de tareas

Crea una variable llamada mixedTasks de tipo Task[] que contenga las tres tareas originales: firstTask, secondTask y thirdTask.

Usa tu función listTasksByStatus para crear los siguientes arreglos filtrados:

  • Filtra mixedTasks por el estado 'todo' y guarda el resultado en todoTasks
  • Filtra mixedTasks por el estado 'in-progress' y guarda el resultado en inProgressTasks
  • Filtra mixedTasks por el estado 'done' y guarda el resultado en doneTasks

Imprime las siguientes salidas en líneas separadas:

  • Imprime la longitud de mixedTasks
  • Imprime la longitud de todoTasks
  • Imprime la longitud de inProgressTasks
  • Imprime la longitud de doneTasks
  • Llama a getTaskInfo con la primera tarea de todoTasks e imprime el resultado
  • Llama a getTaskInfo con la primera tarea de inProgressTasks e imprime el resultado
  • Llama a getTaskInfo con la primera tarea de doneTasks e imprime el resultado

Pruébalo tú mismo

// Task interface and variables 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];
}

const initialTasks: Task[] = [firstTask, secondTask];

const updatedTasks: Task[] = addTask(initialTasks, "Review code changes");

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

// Create testTasks array
const testTasks: Task[] = [firstTask, secondTask, thirdTask];

// Use changeTaskStatus function
const progressTasks = changeTaskStatus(testTasks, 1, 'in-progress');
const completedTasks = changeTaskStatus(progressTasks, 2, 'done');

// Print the required outputs
console.log(getTaskInfo(testTasks[0]));
console.log(getTaskInfo(progressTasks[0]));
console.log(getTaskInfo(completedTasks[1]));
console.log(testTasks[0].status);
console.log(completedTasks[1].status);

Todas las lecciones de Introducción a TypeScript

Practica por tu cuenta: Playground de TypeScript