Assembler le tout
Fait partie de la section Introduction à TypeScript du Journey JavaScript de Coddy. Leçon 50 sur 73.
Défi
FacileLes éléments suivants vous sont fournis depuis le défi précédent :
- L’interface
Taskavecid(nombre),title(chaîne), etstatus(type littéral) - Trois variables de tâche :
firstTask,secondTasketthirdTask - 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,doneTasksetsampleTasks
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 :
- Utilisez
addTaskpour ajouter une nouvelle tâche avec le titre"Write documentation"àprojectTaskset stockez le résultat dansexpandedTasks - Utilisez
changeTaskStatuspour modifier le statut de la tâche ayant l’ID202en'in-progress'dansexpandedTaskset stockez le résultat dansupdatedProjectTasks - Utilisez
changeTaskStatuspour modifier le statut de la tâche nouvellement ajoutée (ID3) en'done'dansupdatedProjectTaskset stockez le résultat dansfinalTasks - Utilisez
listTasksByStatuspour filtrerfinalTasksselon le statut'done'et stockez le résultat danscompletedProjectTasks
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
printTaskSummaryavec la première tâche decompletedProjectTasks - Appelez
printTaskSummaryavec la dernière tâche decompletedProjectTasks - Appelez
printAllTaskSummariesavecfinalTasks
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
1Premiers pas avec TS
Qu'est-ce que TypeScript ?Pourquoi utiliser TypeScript ?Votre premier code TypeScriptProcessus de compilation et erreursRécapitulatif : Introduction à TS4Travailler avec les fonctions
Typage des paramètres et valeurs de retourTypage des fonctions fléchéesLe type de retour 'void'Paramètres optionnels avec '?'Valeurs par défaut des paramètresTypage des paramètres RestDéfinir des types de fonctionsRécapitulatif : Créer des fonctions typées7Projet : Une liste de tâches simple
Projet : Définir la struct TaskFonction pour ajouter une tâche2Types fondamentaux
Types de base : str, num, booleanLe type 'any' : la porte de sortieLe type 'unknown'Travailler avec 'null' et 'undef'L'inférence de type en actionAnnotations de type explicitesRécapitulatif : Pratique des types fondamentaux5Types : Alias, Unions & Intersections
Alias de types pour les primitifsTypes d'union ('|')Travailler avec les types d'unionTypes littérauxTypes d'intersection ('&')Combiner des alias de typesRécapitulatif : Combinaisons de types avancées3Structure de données : Tableaux et Tuples
Tableaux typésModificateur 'readonly' pour les tableauxQu'est-ce qu'un tuple ?Déclaration et accès aux tuplesDéstructuration de tuplesTuples readonlyTableaux typés multidimensionnelsSpread operator avec les tableauxRécapitulatif : Tableaux et tuples6Typage des objets et interfaces
Annotations de type d'objet en ligneAlias de type pour les objetsIntroduction aux interfacesInterfaces vs Alias de typePropriétés optionnelles et ReadonlyÉtendre les interfaces et les typesAjout de méthodes aux interfacesRécapitulatif : Définir la structure des objetsEntraînez-vous par vous-même : Compilateur JavaScript en ligne