Menu
CoddyTech

タスクのステータスを変更する関数

CoddyのJavaScriptジャーニー「Introduction To TypeScript」セクションの一部。レッスン 47/73。

challenge icon

チャレンジ

簡単

前のチャレンジから、以下の内容が提供されています:

  • id (number)、title (string)、および status (リテラル型) を持つ Task インターフェース
  • 3つのタスク変数:firstTask、secondTask、および thirdTask
  • getTaskInfo 関数
  • addTask 関数
  • initialTasks および updatedTasks 配列

3つのパラメータを受け取る changeTaskStatus という名前の関数を作成してください:

  • Task[] 型の taskList (Taskオブジェクトの配列)
  • number 型の taskId (更新するタスクのID)
  • 'todo' | 'in-progress' | 'done' 型の newStatus (タスクの新しいステータス)

この関数は以下の処理を行う必要があります:

  • タスクリストの中から、一致するIDを持つタスクを見つける
  • そのタスクのステータスを新しいステータスに更新する
  • 更新されたタスクを含む新しい配列を返す(元の配列は変更しないでください)
  • 指定されたIDのタスクが見つからない場合は、元の配列をそのまま返す

firstTask、secondTask、および thirdTask を含む、Task[] 型の testTasks という名前の変数を作成してください。

changeTaskStatus 関数を使用して、以下の操作を行ってください:

  • IDが 1 のタスクのステータスを 'in-progress' に変更し、その結果を progressTasks に保存する
  • progressTasks 内のIDが 2 のタスクのステータスを 'done' に変更し、その結果を completedTasks に保存する

以下の出力を別々の行に表示してください:

  • testTasks の最初のタスクを引数にして getTaskInfo を呼び出し、その結果を出力する
  • progressTasks の最初のタスクを引数にして getTaskInfo を呼び出し、その結果を出力する
  • completedTasks の2番目のタスクを引数にして getTaskInfo を呼び出し、その結果を出力する
  • testTasks の最初のタスクのステータスを出力する
  • completedTasks の2番目のタスクのステータスを出力する

自分で試してみよう

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

Introduction To TypeScriptのすべてのレッスン

自分で練習してみよう: TypeScriptプレイグラウンド