Функция: Печать сводки задач
Часть раздела Введение в TypeScript путешествия по JavaScript на Coddy. Урок 49 из 73.
Задание
ЛегкоВам предоставлены следующие элементы из предыдущего задания:
- Интерфейс
Taskс полямиid(number),title(string) иstatus(литеральный тип) - Три переменные задач:
firstTask,secondTaskиthirdTask - Функция
getTaskInfo - Функция
addTask - Функция
changeTaskStatus - Функция
listTasksByStatus - Массивы
initialTasks,updatedTasks,testTasks,progressTasks,completedTasks,mixedTasks,todoTasks,inProgressTasksиdoneTasks
Создайте функцию с именем printTaskSummary, которая принимает один параметр:
taskтипаTask(одиночный объект Task)
Функция должна:
- Выводить отформатированную сводку в консоль в точном формате:
"ID: [id], Title: [title], Status: [status]" - Иметь тип возвращаемого значения
void
Создайте функцию с именем printAllTaskSummaries, которая принимает один параметр:
taskListтипаTask[](массив объектов Task)
Функция должна:
- Использовать цикл для вызова
printTaskSummaryдля каждой задачи в массиве - Иметь тип возвращаемого значения
void
Создайте переменную с именем sampleTasks типа Task[], содержащую следующие задачи:
- Задача с id
101, заголовком"Design user interface"и статусом'todo' - Задача с id
102, заголовком"Implement authentication"и статусом'in-progress' - Задача с id
103, заголовком"Deploy to production"и статусом'done'
Выведите следующие результаты:
- Вызовите
printTaskSummaryсfirstTask - Вызовите
printTaskSummaryсо второй задачей изsampleTasks - Вызовите
printAllTaskSummariesсsampleTasks - Вызовите
printTaskSummaryс последней задачей изdoneTasks
Попробуйте сами
// Task interface and previous code from earlier 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
);
}
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');
// Create the listTasksByStatus function
function listTasksByStatus(taskList: Task[], status: 'todo' | 'in-progress' | 'done'): Task[] {
return taskList.filter(task => task.status === status);
}
// Create mixedTasks array
const mixedTasks: Task[] = [firstTask, secondTask, thirdTask];
// Filter tasks by status
const todoTasks = listTasksByStatus(mixedTasks, 'todo');
const inProgressTasks = listTasksByStatus(mixedTasks, 'in-progress');
const doneTasks = listTasksByStatus(mixedTasks, 'done');
// Print the required outputs
console.log(mixedTasks.length);
console.log(todoTasks.length);
console.log(inProgressTasks.length);
console.log(doneTasks.length);
console.log(getTaskInfo(todoTasks[0]));
console.log(getTaskInfo(inProgressTasks[0]));
console.log(getTaskInfo(doneTasks[0]));Все уроки раздела Введение в TypeScript
1Начало работы с TS
Что такое TypeScript?Зачем использовать TypeScript?Ваш первый код на TypeScriptПроцесс компиляции и ошибкиИтоги: Введение в TS4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация стрелочных функцийТип возвращаемого значения 'void'Необязательные параметры с '?'Значения параметров по умолчаниюТипизация Rest-параметровОпределение типов функцийИтоги: Создание типизированных функций7Проект: Простой список задач
Проект: Определение структуры TaskФункция для добавления задачи2Основные типы
Базовые типы: str, num, booleanТип 'any': лазейкаТип 'unknown'Работа с 'null' и 'undef'Вывод типов в действииЯвные аннотации типовИтоги: Практика по основным типам5Типы: псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения ('|')Работа с типами объединенияЛитеральные типыТипы пересечения ('&')Комбинирование псевдонимов типовИтоги: продвинутые комбинации типов3Структуры данных: массивы и кортежи
Типизированные массивыМодификатор 'readonly' для массивовЧто такое кортеж?Объявление кортежей и доступ к нимДеструктуризация кортежейКортежи readonlyМногомерные типизированные массивыОператор spread с массивамиИтоги: массивы и кортежиПотренируйтесь самостоятельно: Онлайн-компилятор JavaScript