Juntando Tudo
Parte da seção Introdução ao TypeScript do Journey de JavaScript da Coddy. Lição 50 de 73.
Desafio
FácilVocê recebeu o seguinte do desafio anterior:
- A interface
Taskcomid(número),title(string) estatus(tipo literal) - Três variáveis de tarefa:
firstTask,secondTaskethirdTask - A função
getTaskInfo - A função
addTask - A função
changeTaskStatus - A função
listTasksByStatus - A função
printTaskSummary - A função
printAllTaskSummaries - Todos os arrays de tarefas:
initialTasks,updatedTasks,testTasks,progressTasks,completedTasks,mixedTasks,todoTasks,inProgressTasks,doneTasksesampleTasks
Crie um fluxo de trabalho abrangente de gerenciamento de tarefas que demonstre todas as funcionalidades que você desenvolveu:
Crie uma variável chamada projectTasks do tipo Task[] contendo estas tarefas iniciais:
- Uma tarefa com id
201, título"Setup development environment"e status'done' - Uma tarefa com id
202, título"Create project structure"e status'todo'
Execute as seguintes operações em sequência:
- Use
addTaskpara adicionar uma nova tarefa com o título"Write documentation"aprojectTaskse armazene o resultado emexpandedTasks - Use
changeTaskStatuspara alterar o status da tarefa com ID202para'in-progress'emexpandedTaskse armazene o resultado emupdatedProjectTasks - Use
changeTaskStatuspara alterar o status da tarefa recém-adicionada (ID3) para'done'emupdatedProjectTaskse armazene o resultado emfinalTasks - Use
listTasksByStatuspara filtrarfinalTaskspelo status'done'e armazene o resultado emcompletedProjectTasks
Imprima as seguintes saídas em linhas separadas:
- Imprima o comprimento de
projectTasks - Imprima o comprimento de
finalTasks - Imprima o comprimento de
completedProjectTasks - Chame
printTaskSummarycom a primeira tarefa decompletedProjectTasks - Chame
printTaskSummarycom a última tarefa decompletedProjectTasks - Chame
printAllTaskSummariescomfinalTasks
Experimente você mesmo
// 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 as lições de Introdução ao TypeScript
1Primeiros Passos com TS
O que é TypeScript?Por que usar TypeScript?Seu Primeiro Código TypeScriptProcesso de Compilação e ErrosRecapitulação: Introdução ao TS4Trabalhando com Funções
Tipagem de Parâmetros e RetornosTipagem de Arrow FunctionsO Tipo de Retorno 'void'Parâmetros Opcionais com '?'Valores Padrão de ParâmetrosTipagem de Rest ParametersDefinindo Tipos de FunçõesRecapitulação: Criando Funções Tipadas7Projeto: Uma Lista de Tarefas Simples
Projeto: Definindo a Struct de TarefaFunção para Adicionar uma Tarefa2Tipos Principais
Tipos Básicos: str, num, booleanO Tipo 'any': Válvula de EscapeO Tipo 'unknown'Trabalhando com 'null' e 'undef'Inferência de Tipo na PráticaAnotações de Tipo ExplícitasRecapitulação: Prática de Tipos Principais5Tipos: Aliases, Uniões e Interseções
Aliases de Tipos para PrimitivosTipos de União ('|')Trabalhando com Tipos de UniãoTipos LiteraisTipos de Interseção ('&')Combinando Aliases de TiposRecapitulação: Combinações Avançadas de Tipos3Estrutura de Dados: Arrays e Tuplas
Arrays TipadosModificador 'readonly' para ArraysO que é uma Tupla?Declarando e Acessando TuplasDesestruturando TuplasTuplas ReadonlyArrays Tipados MultidimensionaisSpread Operator com ArraysRecapitulação: Arrays e TuplasPratique por conta própria: Compilador de JavaScript online