ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [learn-typescript] ํ•  ์ผ ๊ด€๋ฆฌ ์•ฑ JS -> TS ๋ณ€ํ™˜
    codeStates front-end/Typescript 2023. 7. 4. 16:33
    ๋ฐ˜์‘ํ˜•

     

     

     

    ๐Ÿ“Œ ํ•  ์ผ ๊ด€๋ฆฌ ์•ฑ JS -> TS ๋ณ€ํ™˜

     

    JavaScript

     

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

     

     

    >>>

     

    TypeScript

     

     

    // ํƒ€์ž…๋ณ„์นญ
    // type Todo = {
    //   id: number;
    //   title: string;
    //   done: boolean;
    // };
    
    // ์ธํ„ฐํŽ˜์ด์Šค ์„ค์ •
    interface Todo {
      id: number;
      title: string;
      done: boolean;
    }
    
    // ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ todoItems ์„ ์–ธ
    let todoItems: Todo[];
    
    // api
    // todos๋Š” ๋ฐฐ์—ด์•ˆ์— ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด์žˆ๋‹ค.
    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(): object[] {
      const todos = fetchTodoItems();
      return todos;
    }
    
    // ๋ฐ˜ํ™˜๊ฐ’(return)์ด ์—†์„ ๋•Œ void๋กœ ์„ ์–ธ
    function addTodo(todo: Todo): void {
      todoItems.push(todo);
    }
    
    // index -> ๋ฐฐ์—ด์˜ ํŠน์ • ์ธ๋ฑ์Šค
    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: 'item 4',
        done: false,
      };
      addTodo(item1);
      addTodo({
        id: 5,
        title: 'item 5',
        done: false,
      });
    }
    
    // NOTE: ์œ ํ‹ธ ํ•จ์ˆ˜
    function log(): void {
      console.log(todoItems);
    }
    
    todoItems = fetchTodoItems();
    addTwoTodoItems();
    log();

     

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.