비동기 처리와 Promise 제네릭
비동기 함수(Promise)는 당장 데이터를 뱉어내지 않기 때문에 반환 타입을 정의할 때 주의해야 합니다. Promise<성공시데이터타입> 형태로 제네릭을 넘겨주면, await로 결과를 받았을 때 완벽한 타입 추론의 마법을 경험할 수 있습니다.
// Promise는 성공 시 "어떤 타입"의 데이터를 줄 것인지 제네릭으로 미리 약속해야 합니다.
function fetchUserData(): Promise<{ name: string; age: number }> {
return fetch("https://api.test.com/user")
.then(response => response.json());
}
async function run() {
// await를 쓰면 Promise 껍데기가 벗겨지고 진짜 데이터가 user 변수에 담깁니다.
// TS는 이미 user가 { name: string; age: number } 구조라는 것을 완벽히 알고 있습니다!
const user = await fetchUserData();
console.log(user.name);
}