Menu
Coddy logo textTech

Hepsini Bir Araya Getirme

Coddy'nin JavaScript Journey'sinin TypeScript'e Giriş bölümünün bir parçası. Ders 50 / 73.

challenge icon

Görev

Kolay

Önceki görevden size aşağıdakiler sağlanmıştır:

  • id (number), title (string) ve status (literal type) özelliklerine sahip Task arayüzü
  • Üç görev değişkeni: firstTask, secondTask ve thirdTask
  • getTaskInfo fonksiyonu
  • addTask fonksiyonu
  • changeTaskStatus fonksiyonu
  • listTasksByStatus fonksiyonu
  • printTaskSummary fonksiyonu
  • printAllTaskSummaries fonksiyonu
  • Tüm görev dizileri: initialTasks, updatedTasks, testTasks, progressTasks, completedTasks, mixedTasks, todoTasks, inProgressTasks, doneTasks ve sampleTasks

Oluşturduğunuz tüm işlevselliği gösteren kapsamlı bir görev yönetimi iş akışı oluşturun:

Şu başlangıç görevlerini içeren Task[] tipinde projectTasks adında bir değişken oluşturun:

  • id değeri 201, title değeri "Setup development environment" ve status değeri 'done' olan bir görev
  • id değeri 202, title değeri "Create project structure" ve status değeri 'todo' olan bir görev

Aşağıdaki işlemleri sırasıyla gerçekleştirin:

  1. projectTasks dizisine "Write documentation" başlıklı yeni bir görev eklemek için addTask kullanın ve sonucu expandedTasks içinde saklayın
  2. expandedTasks içindeki ID'si 202 olan görevin durumunu 'in-progress' olarak değiştirmek için changeTaskStatus kullanın ve sonucu updatedProjectTasks içinde saklayın
  3. updatedProjectTasks içindeki yeni eklenen görevin (ID 3) durumunu 'done' olarak değiştirmek için changeTaskStatus kullanın ve sonucu finalTasks içinde saklayın
  4. finalTasks dizisini 'done' durumuna göre filtrelemek için listTasksByStatus kullanın ve sonucu completedProjectTasks içinde saklayın

Aşağıdaki çıktıları ayrı satırlara yazdırın:

  • projectTasks dizisinin uzunluğunu yazdırın
  • finalTasks dizisinin uzunluğunu yazdırın
  • completedProjectTasks dizisinin uzunluğunu yazdırın
  • completedProjectTasks dizisindeki ilk görev ile printTaskSummary fonksiyonunu çağırın
  • completedProjectTasks dizisindeki son görev ile printTaskSummary fonksiyonunu çağırın
  • finalTasks ile printAllTaskSummaries fonksiyonunu çağırın

Kendin dene

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

TypeScript'e Giriş bölümündeki tüm dersler

Kendi başına pratik yap: Online JavaScript derleyicisi