[typescript] 비동기 제네릭 함수와 타입 추론

TypeScript에서 비동기 함수를 작성하고 해당 함수가 일반적으로 사용되는 경우, 일반적으로 Promise와 함께 제네릭을 사용하여 특정 유형의 값을 반환하도록 정의합니다. 이러한 경우, 함수가 반환하는 값의 유형을 자동으로 추론할 수 있도록 IDE(Integrated Development Environment)가 도움을 줍니다.

이번 글에서는 TypeScript에서 비동기 제네릭 함수를 선언하고 제네릭 타입 추론을 통해 코드를 더욱 간결하고 유연하게 작성하는 방법에 대해 알아보겠습니다.

비동기 함수 정의하기

먼저, Promise를 사용하여 간단한 비동기 함수를 정의해봅시다. 다음은 숫자를 인자로 받아 1초 후에 제곱 값을 반환하는 delayedSquare 함수의 예제입니다.

function delayedSquare(num: number): Promise<number> {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(num * num);
    }, 1000);
  });
}

위의 코드에서 delayedSquare 함수는 Promise<number>를 반환하도록 명시적으로 선언되어 있습니다.

제네릭 타입을 사용한 비동기 함수

이제, Promise 및 제네릭을 사용하여 일반적인 비동기 함수를 작성하는 방법을 알아봅시다. 다음은 유형 T를 입력으로 받아 Promise를 반환하는 제네릭 함수의 예제입니다.

function asyncFunction<T>(data: T): Promise<T> {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(data);
    }, 1000);
  });
}

위의 코드에서 asyncFunctionT 타입의 입력 값을 받고, Promise<T>를 반환합니다.

타입 추론을 통한 간편한 비동기 함수 작성

TypeScript는 asyncawait 키워드와 함께 제네릭 타입을 추론할 수 있습니다. 따라서 함수가 일반적인 Promise를 반환하는 경우 명시적으로 제네릭을 정의할 필요가 없습니다. 이를 통해 코드를 더 간결하게 작성할 수 있습니다.

async function simpleAsyncFunction(data) {
  return await asyncFunction(data);
}

위의 코드에서 simpleAsyncFunctionasync 키워드를 사용하여 Promise를 반환하는 함수입니다. 함수 내부에서는 await 키워드를 통해 asyncFunction을 호출해 비동기 작업을 수행하고 있습니다.

지금까지 TypeScript에서 비동기 제네릭 함수를 정의하고 제네릭 타입 추론을 통해 코드를 간소화하는 방법에 대해 알아보았습니다.

이제 여러분은 보다 유연하고 간결한 TypeScript 코드를 작성할 수 있을 것입니다. 관련하여 궁금한 점이 있다면 TypeScript 공식 문서를 참고해보시기를 권장합니다.

TypeScript 공식 문서