목표

Tanstack Query의 useQuery와 useMutaion을 Type Safe하게 사용해보자.

<aside> 💡 Tanstack Query?

Tanstack Query는 서버 상태를 불러오고, 캐싱하고, 지속적으로 동기화하고 업데이트하는 작업을 도와주는 비동기 상태 관리 라이브러리이다.

자세한 내용 : Tanstack Query

</aside>

<aside> 💡 Type Safe?

말 그대로 타입에 안정적인 것을 의미한다.

</aside>

Types

useQuery의 Types

구현

1. Types 정의

// @types/chat.d.ts
interface ChatRoomById {
  chatRoomId: number;
  artist: {
    id: number;
    name: string;
    responseTime: string;
  };
  member: {
    id: number;
    name: string;
    responseTime: string;
  };
  messages: Message[];
}

// @types/index.d.ts
interface Error {
  code: string;
  detail: string;
  error: string;
  status: number;
}

2. Api에서 Type 적용

// apis/chat/chatApi.ts
async getChatRoom(id: number): Promise<ChatRoomById> {
	const { data } = await axios.get(`/chat-rooms/${id}`);
	return data;
}

axios의 리턴값은 Promise객체이기 때문에 Promise 객체로 타입 설정을 하고, 제네릭 타입으로 ChatRoomById를 설정해줍니다.