4. 타입스크립트 적용해보기 - boostcamp-2020/Project15-C-Client-Based-Formula-Editor GitHub Wiki

  • 할일 관리 프로젝트
let todoItems: { id: number; title: string; done: boolean }[];

// api
function fetchTodoItems(): { id: number; title: string; done: boolean }[] {
  const todos = [
    { id: 1, title: '안녕', done: false },
    { id: 2, title: '타입', done: false },
    { id: 3, title: '스크립트', done: false },
  ];
  return todos;
}

// crud methods
function fetchTodos(): object[] {
  const todos = fetchTodoItems();
  return todos;
}

function addTodo(todo: { id: number; title: string; done: boolean }): void {
  todoItems.push(todo);
}

function deleteTodo(index: number): void {
  todoItems.splice(index, 1);
}

function completeTodo(
  index: number,
  todo: { id: number; title: string; done: boolean }
): void {
  todo.done = true;
  todoItems.splice(index, 1, todo);
}

// business logic
function logFirstTodo(): object {
  return todoItems[0];
}

function showCompleted(): object[] {
  return todoItems.filter(item => item.done);
}

// TODO: 아래 함수의 내용을 채워보세요. 아래 함수는 `addTodo()` 함수를 이용하여 2개의 새 할 일을 추가하는 함수입니다.
function addTwoTodoItems(): void {
  // addTodo() 함수를 두 번 호출하여 todoItems에 새 할 일이 2개 추가되어야 합니다.

  const item1 = {
    id: 4,
    title: '아이템 4',
    done: false,
  };

  addTodo(item1);
  addTodo({
    id: 5,
    title: '아이템 5',
    done: false,
  });
}

// NOTE: 유틸 함수
function log(): void {
  console.log(todoItems);
}

todoItems = fetchTodoItems();
addTwoTodoItems();
log();
  • 문제 : 중복된 타입이 많이 존재하고 있다.

  • 타입을 미리 정의 할 수 있다.

    • type 변수를 활용하기 ( 별칭 방법 )
    type Todo = {
      id: number;
      title: string;
      donme: boolean;
    };
    
    let todoItems: Todo[];
    
    • interface를 활용하기
    interface Tod {
      id: number;
      ittle: string;
      done: boolean;
    }
    
    let todoItems: Todo[];