Menu
CoddyTech
flag Ar iconالعربيةdown icon

دالة لتغيير حالة المهمة

جزء من قسم مقدمة إلى TypeScript في رحلة JavaScript على Coddy. الدرس 47 من 73.

challenge icon

التحدي

سهل

يتم تزويدك بما يلي من التحدي السابق:

  • واجهة Task مع id (number)، و title (string)، و status (literal type)
  • ثلاثة متغيرات للمهام: firstTask، و secondTask، و thirdTask
  • دالة getTaskInfo
  • دالة addTask
  • مصفوفتي initialTasks و updatedTasks

أنشئ دالة باسم changeTaskStatus تأخذ ثلاثة معاملات:

  • taskList من نوع Task[] (مصفوفة من كائنات Task)
  • taskId من نوع number (معرف المهمة المراد تحديثها)
  • newStatus من نوع 'todo' | 'in-progress' | 'done' (الحالة الجديدة للمهمة)

يجب أن تقوم الدالة بما يلي:

  • البحث عن المهمة ذات المعرف المطابق في قائمة المهام
  • تحديث حالة تلك المهمة إلى الحالة الجديدة
  • إرجاع مصفوفة جديدة تحتوي على المهمة المحدثة (لا تقم بتعديل المصفوفة الأصلية)
  • إذا لم يتم العثور على مهمة بالمعرف المحدد، فقم بإرجاع المصفوفة الأصلية دون تغيير

أنشئ متغيرًا باسم testTasks من نوع Task[] يحتوي على firstTask، و secondTask، و thirdTask.

استخدم دالة changeTaskStatus للقيام بما يلي:

  • تغيير حالة المهمة ذات المعرف 1 إلى 'in-progress' وتخزين النتيجة في progressTasks
  • تغيير حالة المهمة ذات المعرف 2 إلى 'done' في progressTasks وتخزين النتيجة في completedTasks

اطبع المخرجات التالية في أسطر منفصلة:

  • استدعِ getTaskInfo مع المهمة الأولى من testTasks واطبع النتيجة
  • استدعِ getTaskInfo مع المهمة الأولى من progressTasks واطبع النتيجة
  • استدعِ getTaskInfo مع المهمة الثانية من completedTasks واطبع النتيجة
  • اطبع حالة المهمة الأولى في testTasks
  • اطبع حالة المهمة الثانية في completedTasks

جرّب بنفسك

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];
}

const initialTasks: Task[] = [firstTask, secondTask];

const updatedTasks: Task[] = addTask(initialTasks, "Review code changes");

console.log(initialTasks.length);
console.log(updatedTasks.length);
console.log(getTaskInfo(updatedTasks[updatedTasks.length - 1]));
console.log(updatedTasks[updatedTasks.length - 1].title);
console.log(updatedTasks[updatedTasks.length - 1].status);

جميع دروس مقدمة إلى TypeScript

تدرّب بنفسك: Playground لـ TypeScript