Menu
CoddyTech

Функция для изменения статуса задачи

Часть раздела Введение в TypeScript путешествия по JavaScript на Coddy. Урок 47 из 73.

challenge icon

Задание

Легко

Вам предоставлены следующие элементы из предыдущего задания:

  • Интерфейс Task с полями id (number), title (string) и status (литеральный тип)
  • Три переменные задач: firstTask, secondTask и thirdTask
  • Функция getTaskInfo
  • Функция addTask
  • Массивы initialTasks и updatedTasks

Создайте функцию с именем changeTaskStatus, которая принимает три параметра:

  • taskList типа Task[] (массив объектов Task)
  • taskId типа number (ID задачи, которую нужно обновить)
  • newStatus типа 'todo' | 'in-progress' | 'done' (новый статус для задачи)

Функция должна:

  • Найти задачу с соответствующим ID в списке задач
  • Обновить статус этой задачи на новый статус
  • Вернуть новый массив с обновленной задачей (не изменяйте исходный массив)
  • Если задача с заданным ID не найдена, вернуть исходный массив без изменений

Создайте переменную с именем testTasks типа Task[], содержащую firstTask, secondTask и thirdTask.

Используйте вашу функцию changeTaskStatus, чтобы:

  • Изменить статус задачи с ID 1 на 'in-progress' и сохранить результат в progressTasks
  • Изменить статус задачи с ID 2 на 'done' в progressTasks и сохранить результат в completedTasks

Выведите следующие результаты на отдельных строках:

  • Вызовите getTaskInfo с первой задачей из testTasks и выведите результат
  • Вызовите getTaskInfo с первой задачей из progressTasks и выведите результат
  • Вызовите getTaskInfo со второй задачей из completedTasks и выведите результат
  • Выведите статус первой задачи в testTasks
  • Выведите статус второй задачи в completedTasks

Попробуйте сами

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");

console.log(initialTasks.length);
console.log(updatedTasks.length);
console.log(getTaskInfo(updatedTasks[updatedTasks.length - 1]));
console.log(updatedTasks[updatedTasks.length - 1].title);
console.log(updatedTasks[updatedTasks.length - 1].status);

Все уроки раздела Введение в TypeScript

Потренируйтесь самостоятельно: Песочница TypeScript