TypeScript는 JavaScript 프로그래밍 언어를 위한 정적 타입 지원을 제공하여 코드의 안정성과 가독성을 향상시킵니다. 비동기 처리를 위한 타입 추론은 TypeScript에서 매우 중요한 주제 중 하나입니다. 제대로 된 타입 추론을 통해 비동기 작업을 보다 안전하게 다룰 수 있습니다. 이번 블로그 글에서는 TypeScript에서 비동기 처리를 위한 타입 추론에 대해 고려해야 하는 주요 사항을 살펴보겠습니다.
1. Promise와 async/await
TypeScript에서 Promise 기반의 비동기 처리를 할 때, 제네릭 타입을 사용하여 Promise가 반환하는 값을 명시적으로 지정할 수 있습니다. 예를 들어, Promise<number>
는 number 타입의 값을 반환하는 Promise를 나타냅니다. 또한 async 함수 내부에서 비동기 작업을 처리할 때 반환 타입을 명시하는 것도 중요합니다. 이를 통해 TypeScript 컴파일러가 올바른 타입 추론을 할 수 있습니다.
function fetchData(): Promise<number> {
return new Promise<number>((resolve) => {
setTimeout(() => {
resolve(42);
}, 1000);
});
}
async function processData(): Promise<void> {
const data: number = await fetchData();
console.log(data);
}
2. 콜백 함수 타입 추론
콜백 함수는 많은 비동기 API에서 사용됩니다. 하지만 콜백 함수의 매개변수와 반환값에 대한 타입을 명확히 지정하지 않으면 TypeScript가 올바른 타입을 추론하기 어려울 수 있습니다. 콜백 함수의 타입을 정확히 명시함으로써 TypeScript 컴파일러가 올바른 타입 추론을 할 수 있도록 도와줍니다.
function fetchData(callback: (data: number) => void) {
setTimeout(() => {
callback(42);
}, 1000);
}
3. 타입 가드 활용
비동기 작업에서 반환된 값을 조건에 따라 다른 타입으로 가공해야 하는 경우가 있습니다. TypeScript에서는 이를 위해 타입 가드를 활용할 수 있습니다. 타입 가드를 통해 반환된 값을 적절히 검사하고 타입을 추론함으로써 코드의 안정성을 높일 수 있습니다.
interface SuccessResult {
success: true;
data: string;
}
interface ErrorResult {
success: false;
error: string;
}
function processResult(result: SuccessResult | ErrorResult) {
if (result.success) {
console.log(result.data.toUpperCase());
} else {
console.error(result.error);
}
}
비동기 처리를 위한 타입 추론은 TypeScript 코드의 안정성과 가독성을 높이는데 중요한 역할을 합니다. 올바른 타입 추론을 위해 Promise, async/await, 콜백 함수 타입, 그리고 타입 가드를 적절히 활용하는 것이 중요합니다.
이상으로 TypeScript에서 비동기 처리를 위한 타입 추론에 대한 고려 사항에 대해 알아보았습니다.
참고 문헌:
- TypeScript 공식 문서 (https://www.typescriptlang.org/docs/handbook/2/promise.html)
-
Async/Await - JavaScript MDN (https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/async_function)