TypeScript
TypeScript - 간단한 todoList 만들어보기
jjangsh
2024. 10. 1. 01:54
변수, 함수에서 TS를 사용
// 변수 문법과 똑같음
type CustomType = {
name: string;
age: number;
}
type Age = number;
interface CustomInterface {
name: string;
age: number;
}
let a: number = 1;
function sum(a: number, b: number): number {
return a + b;
}
function objSum({ a, b }: { a: number; b: number }): string {
return `${a + b}`;
}
비동기 함수에서 TS 사용
( localhost 에 실행된 JSON-Server에 임의로 추가해 준 Todo를 불러오는 로직 )
// 커스텀 타입인 Todo 타입을 선언
type Todo = {
id: string;
title: string;
completed: boolean;
}
다음으로 비동기 함수를 작성하는데, 이 함수는 fetch API를 사용하여 데이터를 가져오고, 응답을 JSON 형식으로 파싱한다.
TypeScript를 사용하여 함수의 반환 타입을 명시하면, 더 안전하게 코드를 작성할 수 있다.
async function getTodos(): Promise<Todo[]> {
const res = await fetch(`http://localhost:3001/todos`);
const data = await res.json()
return data;
}
getTodos().then((res) => console.log(res[0]));
Todo 타입을 정의하고, getTodos 함수가 Todo 배열을 반환하도록 명시했다.
이렇게 하면 비동기 함수가 any 가 아닌 정확한 타입을 반환하도록 할 수 있다.
📌 여기부턴 내가 만든 todoList
// 실습을 위해 json-server 사용
// db.json
{
"todos": [
{
"id:": "d1",
"title": "숙제하기",
"completed": false
}
]
}
구조는 아래와 같다.
// test.ts
export type Todo = {
id: string;
title: string;
completed: boolean;
};
export async function getTodos() {
const res = await fetch("http://localhost:4000/todos");
const data: Todo[] = await res.json();
return data;
}
// App.tsx
import { useEffect, useState } from "react";
import "./App.css";
import TodoList from "./TodoList";
import { getTodos, Todo } from "./test";
function App() {
const [todoList, setTodoList] = useState<Todo[]>([]);
useEffect(() => {
getTodos().then((data) => setTodoList(data));
}, []);
return (
<div>
<TodoList todoList={todoList} />
</div>
);
}
export default App;
// TodoList.tsx
import { type Todo } from "./test";
import TodoItem from "./TodoItem";
type TodoListProps = { todoList: Todo[] };
const TodoList = ({ todoList }: TodoListProps) => {
return (
<div>
{todoList.map((todo) => (
<TodoItem {...todo} />
))}
</div>
);
};
export default TodoList;
// TodoItem.tsx
import { type Todo } from "./test";
type TodoItemProps = Todo;
const TodoItem = ({ id, title, completed }: TodoItemProps) => {
return (
<div>
<div>{id}</div>
<div>{title}</div>
<div>{`${completed}`}</div>
</div>
);
};
export default TodoItem;
불러오는 것까지는 되었고 추가, 수정, 삭제도 구현해 봐야겠다.