Menu
Coddy logo textTech

Assembler le tout

Fait partie de la section Introduction à TypeScript du Journey JavaScript de Coddy. Leçon 50 sur 73.

challenge icon

Défi

Facile

Les éléments suivants vous sont fournis depuis le défi précédent :

  • L’interface Task avec id (nombre), title (chaîne), et status (type littéral)
  • Trois variables de tâche : firstTask, secondTask et thirdTask
  • La fonction getTaskInfo
  • La fonction addTask
  • La fonction changeTaskStatus
  • La fonction listTasksByStatus
  • La fonction printTaskSummary
  • La fonction printAllTaskSummaries
  • Tous les tableaux de tâches : initialTasks, updatedTasks, testTasks, progressTasks, completedTasks, mixedTasks, todoTasks, inProgressTasks, doneTasks et sampleTasks

Créez un workflow complet de gestion des tâches qui démontre toutes les fonctionnalités que vous avez développées :

Créez une variable nommée projectTasks de type Task[] contenant les tâches initiales suivantes :

  • Une tâche avec l’identifiant 201, le titre "Setup development environment" et le statut 'done'
  • Une tâche avec l’identifiant 202, le titre "Create project structure" et le statut 'todo'

Effectuez les opérations suivantes dans l’ordre :

  1. Utilisez addTask pour ajouter une nouvelle tâche avec le titre "Write documentation" à projectTasks et stockez le résultat dans expandedTasks
  2. Utilisez changeTaskStatus pour modifier le statut de la tâche ayant l’ID 202 en 'in-progress' dans expandedTasks et stockez le résultat dans updatedProjectTasks
  3. Utilisez changeTaskStatus pour modifier le statut de la tâche nouvellement ajoutée (ID 3) en 'done' dans updatedProjectTasks et stockez le résultat dans finalTasks
  4. Utilisez listTasksByStatus pour filtrer finalTasks selon le statut 'done' et stockez le résultat dans completedProjectTasks

Affichez les résultats suivants sur des lignes séparées :

  • Affichez la longueur de projectTasks
  • Affichez la longueur de finalTasks
  • Affichez la longueur de completedProjectTasks
  • Appelez printTaskSummary avec la première tâche de completedProjectTasks
  • Appelez printTaskSummary avec la dernière tâche de completedProjectTasks
  • Appelez printAllTaskSummaries avec finalTasks

Essayez vous-même

// 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]);

Toutes les leçons de Introduction à TypeScript

Entraînez-vous par vous-même : Compilateur JavaScript en ligne