Poniéndolo todo junto
Parte de la sección Introducción a TypeScript del Journey de JavaScript de Coddy. Lección 50 de 73.
Desafío
FácilSe te proporciona lo siguiente del desafío anterior:
- La interfaz
Taskconid(número),title(cadena) ystatus(tipo literal) - Tres variables de tareas:
firstTask,secondTaskythirdTask - La función
getTaskInfo - La función
addTask - La función
changeTaskStatus - La función
listTasksByStatus - La función
printTaskSummary - La función
printAllTaskSummaries - Todos los arrays de tareas:
initialTasks,updatedTasks,testTasks,progressTasks,completedTasks,mixedTasks,todoTasks,inProgressTasks,doneTasksysampleTasks
Crea un flujo de trabajo integral de gestión de tareas que demuestre toda la funcionalidad que has creado:
Crea una variable llamada projectTasks de tipo Task[] que contenga estas tareas iniciales:
- Una tarea con id
201, título"Setup development environment"y estado'done' - Una tarea con id
202, título"Create project structure"y estado'todo'
Realiza las siguientes operaciones en secuencia:
- Usa
addTaskpara añadir una nueva tarea con el título"Write documentation"aprojectTasksy guarda el resultado enexpandedTasks - Usa
changeTaskStatuspara cambiar el estado de la tarea con ID202a'in-progress'enexpandedTasksy guarda el resultado enupdatedProjectTasks - Usa
changeTaskStatuspara cambiar el estado de la tarea recién añadida (ID3) a'done'enupdatedProjectTasksy guarda el resultado enfinalTasks - Usa
listTasksByStatuspara filtrarfinalTaskspor el estado'done'y guarda el resultado encompletedProjectTasks
Imprime los siguientes resultados en líneas separadas:
- Imprime la longitud de
projectTasks - Imprime la longitud de
finalTasks - Imprime la longitud de
completedProjectTasks - Llama a
printTaskSummarycon la primera tarea decompletedProjectTasks - Llama a
printTaskSummarycon la última tarea decompletedProjectTasks - Llama a
printAllTaskSummariesconfinalTasks
Pruébalo tú mismo
// 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 las lecciones de Introducción a TypeScript
1Primeros pasos con TS
¿Qué es TypeScript?¿Por qué usar TypeScript?Tu primer código en TypeScriptProceso de compilación y erroresResumen: Introducción a TS4Trabajando con funciones
Tipado de parámetros y valores de retornoTipado de funciones de flechaEl tipo de retorno 'void'Parámetros opcionales con '?'Valores de parámetros por defectoTipado de parámetros restDefinición de tipos de funcionesRepaso: Construcción de funciones tipadas7Proyecto: Una lista de tareas simple
Proyecto: Definir la estructura TaskFunción para agregar una tarea2Tipos principales
Tipos básicos: str, num, booleanEl tipo 'any': Vía de escapeEl tipo 'unknown'Trabajando con 'null' y 'undef'Inferencia de tipos en acciónAnotaciones de tipo explícitasResumen: Práctica de tipos principales5Tipos: Alias, Uniones e Intersecciones
Alias de tipos para primitivosTipos de unión ('|')Trabajando con tipos de uniónTipos literalesTipos de intersección ('&')Combinando alias de tiposRepaso: Combinaciones de tipos avanzadas3Estructura de datos: Arrays y Tuplas
Arrays tipadosModificador 'readonly' para Arrays¿Qué es una Tupla?Declaración y acceso a TuplasDesestructuración de TuplasTuplas ReadonlyArrays tipados multidimensionalesOperador Spread con ArraysResumen: Arrays y TuplasPractica por tu cuenta: Compilador de JavaScript online