공부방

투두 리스트 만들기 본문

TypeScript

투두 리스트 만들기

코딩 화이팅 2023. 8. 25. 14:12

데이터 만들기

src/data.ts
export const data = [
  { id: 1, task: "장보기", complete: true },
  { id: 2, task: "TS 학습", complete: false },
];

투두 리스트 하나를 만들고 출력해주기

src/TodoItem.ts
class TodoItem {
  constructor(
    public id: number,
    public task: string,
    public complete: boolean = false
  ) {
    this.id = id;
    this.task = task;
    this.complete = complete;
  }

  printDetails(): void {
    console.log(
      `${this.id}\t${this.task}\t${this.complete ? "\t(complete)" : ""}`
    );
  }
}

export default TodoItem;

투두 아이템 id를 만들어주고, 완료 표시 만들어주기

src/TodoCollection.ts
import TodoItem from "./TodoItem";

class TodoCollection {
  private nextId: number = 1;
  //초기값을 바로 정의해줘야됨

  constructor(public userName: string, public todoItems: TodoItem[] = []) {}

  getTodoById(id: number): TodoItem | undefined {
    return this.todoItems.find(item => item.id === id);
  }
  //   item.id === id와 같은 것을 item으로 찾아줌
  //   return 받는게 한 투두 아이템 이기 때문에 TodoItem으로 반환값 타입을 지정하면 return에 에러가 나는데
  //   반환 받을 수 있는 투두 아이템이 없을수도 있기 때문에 에러가 나는 것
  //   따라서 없는 경우도 생각하여 undefined도 같이 타입을 지정해줘야됨

  addTodo(task: string): number {
    while (this.getTodoById(this.nextId)) {
      this.nextId++;
    }
    // this.getTodoById(this.nextId)이 아이디로 찾았을 때 있다면 아이디를 하나씩 더해줌.
    this.todoItems.push(new TodoItem(this.nextId, task));
    // 새로운 todoitems에 넣어줌.
    return this.nextId;
  }

  markComplete(id: number, complete: boolean): void {
    const todoItem = this.getTodoById(id);
    // 아이디로 todoItem을 찾기
    if (todoItem) {
      // todoItem을 찾았다면
      todoItem.complete = complete;
      //   완료 표시 해주기
    }
  }
}

export default TodoCollection;

샘플 데이터를 만들고 거기에 추가하고 완료 표시 바꿔보기

src/index.ts
import TodoCollection from "./TodoCollection";
import TodoItem from "./TodoItem";
import { data } from "./data";

const sampleTodos: TodoItem[] = data.map(
  item => new TodoItem(item.id, item.task, item.complete)
);
//투두 아이템들의 배열을 있는 데이터에 map을 통해 다 가져와준다.

const myTodoCollection = new TodoCollection("My Todo List", sampleTodos);
// sampleTodos가 모여있는 TodoCollection를 선언

myTodoCollection.addTodo("JavaScript 학습하기");
myTodoCollection.addTodo("친구 만나기");

myTodoCollection.markComplete(3, true);

console.log(`${myTodoCollection.userName}`);
myTodoCollection.todoItems.forEach(item => item.printDetails());

npm start

[run] My Todo List
[run] 1 장보기          (complete)
[run] 2 TS 학습
[run] 3 JavaScript 학습하기             (complete)
[run] 4 친구 만나기

 

'TypeScript' 카테고리의 다른 글

Generics  (0) 2023.08.25
Annotation  (0) 2023.08.25
TypeScript란?  (0) 2023.08.25