3. 실습1 (js → ts)

CHOYEAH·2023년 11월 5일
0

TypeScript

목록 보기
3/23
post-custom-banner
  • 변환전
    let todoItems;
    
    // api
    function fetchTodoItems() {
      const todos = [
        { id: 1, title: '안녕', done: false },
        { id: 2, title: '타입', done: false },
        { id: 3, title: '스크립트', done: false },
      ];
      return todos;
    }
    
    // crud methods
    function fetchTodos() {
      const todos = fetchTodoItems();
      return todos;
    }
    
    function addTodo(todo) {
      todoItems.push(todo);
    }
    
    function deleteTodo(index) {
      todoItems.splice(index, 1);
    }
    
    function completeTodo(index, todo) {
      todo.done = true;
      todoItems.splice(index, 1, todo);
    }
    
    // business logic
    function logFirstTodo() {
      return todoItems[0];
    }
    
    function showCompleted() {
      return todoItems.filter(item => item.done);
    }
    
    // TODO: 아래 함수의 내용을 채워보세요. 아래 함수는 `addTodo()` 함수를 이용하여 2개의 새 할 일을 추가하는 함수입니다.
    function addTwoTodoItems() {
      // addTodo() 함수를 두 번 호출하여 todoItems에 새 할 일이 2개 추가되어야 합니다.
    }
    
    // NOTE: 유틸 함수
    function log() {
      console.log(todoItems);
    }
    
    todoItems = fetchTodoItems();
    addTwoTodoItems();
    log();
  • 변환 1단계
    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(): {id: number; title: string; done: boolean}[] {
      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}) {
      todo.done = true;
      todoItems.splice(index, 1, todo);
    }
    
    // business logic
    function logFirstTodo(): {id: number; title: string; done: boolean} {
      return todoItems[0];
    }
    
    function showCompleted(): {id: number; title: string; done: boolean}[]  {
      return todoItems.filter(item => item.done);
    }
    
    // TODO: 아래 함수의 내용을 채워보세요. 아래 함수는 `addTodo()` 함수를 이용하여 2개의 새 할 일을 추가하는 함수입니다.
    function addTwoTodoItems() {
      // addTodo() 함수를 두 번 호출하여 todoItems에 새 할 일이 2개 추가되어야 합니다.
      addTodo({id: 4, title: 'item 4', done: false})
      addTodo({id: 5, title: 'item 5', done: false})
    }
    
    // NOTE: 유틸 함수
    function log() {
      console.log(todoItems);
    }
    
    todoItems = fetchTodoItems();
    addTwoTodoItems();
    log();
  • 변환 2단계 Type 또는 Interface를 사용하면 중복되는 코드를 방지할 수 있다.
    type Todo = {
      id: number;
      title: string;
      done: boolean;
    }
    
    let todoItems: Todo[];
    
    // api
    function fetchTodoItems(): Todo[] {
      const todos = [
        { id: 1, title: '안녕', done: false },
        { id: 2, title: '타입', done: false },
        { id: 3, title: '스크립트', done: false },
      ];
      return todos;
    }
    
    // crud methods
    function fetchTodos(): Todo[] {
      const todos = fetchTodoItems();
      return todos;
    }
    
    function addTodo(todo: Todo): void {
      todoItems.push(todo);
    }
    
    function deleteTodo(index: number): void {
      todoItems.splice(index, 1);
    }
    
    function completeTodo(index: number, todo:Todo) {
      todo.done = true;
      todoItems.splice(index, 1, todo);
    }
    
    // business logic
    function logFirstTodo(): Todo {
      return todoItems[0];
    }
    
    function showCompleted(): Todo[]  {
      return todoItems.filter(item => item.done);
    }
    
    // TODO: 아래 함수의 내용을 채워보세요. 아래 함수는 `addTodo()` 함수를 이용하여 2개의 새 할 일을 추가하는 함수입니다.
    function addTwoTodoItems() {
      // addTodo() 함수를 두 번 호출하여 todoItems에 새 할 일이 2개 추가되어야 합니다.
      addTodo({id: 4, title: 'item 4', done: false})
      addTodo({id: 5, title: 'item 5', done: false})
    }
    
    // NOTE: 유틸 함수
    function log() {
      console.log(todoItems);
    }
    
    todoItems = fetchTodoItems();
    addTwoTodoItems();
    log();
profile
Move fast & break things
post-custom-banner

0개의 댓글