Menu
Coddy logo textTech

Juntando Tudo

Parte da seção Introdução ao TypeScript do Journey de JavaScript da Coddy. Lição 50 de 73.

challenge icon

Desafio

Fácil

Você recebeu o seguinte do desafio anterior:

  • A interface Task com id (número), title (string) e status (tipo literal)
  • Três variáveis de tarefa: firstTask, secondTask e thirdTask
  • A função getTaskInfo
  • A função addTask
  • A função changeTaskStatus
  • A função listTasksByStatus
  • A função printTaskSummary
  • A função printAllTaskSummaries
  • Todos os arrays de tarefas: initialTasks, updatedTasks, testTasks, progressTasks, completedTasks, mixedTasks, todoTasks, inProgressTasks, doneTasks e sampleTasks

Crie um fluxo de trabalho abrangente de gerenciamento de tarefas que demonstre todas as funcionalidades que você desenvolveu:

Crie uma variável chamada projectTasks do tipo Task[] contendo estas tarefas iniciais:

  • Uma tarefa com id 201, título "Setup development environment" e status 'done'
  • Uma tarefa com id 202, título "Create project structure" e status 'todo'

Execute as seguintes operações em sequência:

  1. Use addTask para adicionar uma nova tarefa com o título "Write documentation" a projectTasks e armazene o resultado em expandedTasks
  2. Use changeTaskStatus para alterar o status da tarefa com ID 202 para 'in-progress' em expandedTasks e armazene o resultado em updatedProjectTasks
  3. Use changeTaskStatus para alterar o status da tarefa recém-adicionada (ID 3) para 'done' em updatedProjectTasks e armazene o resultado em finalTasks
  4. Use listTasksByStatus para filtrar finalTasks pelo status 'done' e armazene o resultado em completedProjectTasks

Imprima as seguintes saídas em linhas separadas:

  • Imprima o comprimento de projectTasks
  • Imprima o comprimento de finalTasks
  • Imprima o comprimento de completedProjectTasks
  • Chame printTaskSummary com a primeira tarefa de completedProjectTasks
  • Chame printTaskSummary com a última tarefa de completedProjectTasks
  • Chame printAllTaskSummaries com finalTasks

Experimente você mesmo

// 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 as lições de Introdução ao TypeScript

Pratique por conta própria: Compilador de JavaScript online