[typescript] 비동기 처리를 위한 타입 추론 고려 사항

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에서 비동기 처리를 위한 타입 추론에 대한 고려 사항에 대해 알아보았습니다.

참고 문헌: