[typescript] 함수 오버로딩에서 매개변수의 타입 순서가 다른 경우

일반적으로 TypeScript에서는 함수 오버로딩을 사용하여 동일한 함수명으로 다양한 매개변수 유형을 지원할 수 있습니다. 그러나 매개변수의 순서가 다른 경우에는 어떻게 해야 할까요? 이 블로그 포스트에서는 TypeScript에서 함수 오버로딩과 매개변수의 타입 순서가 다른 경우에 대해 알아보겠습니다.

함수 오버로딩이란?

함수 오버로딩(Function overloading)은 동일한 함수명으로 여러 가지 시그니처를 가진 함수를 정의하는 것을 말합니다. TypeScript에서는 함수 시그니처를 여러 개 지정하여 오버로딩을 구현할 수 있습니다.

function add(x: number, y: number): number;
function add(x: string, y: string): string;
function add(x: any, y: any): any {
  return x + y;
}

위 코드에서 add 함수는 number 타입 및 string 타입에 따라 다른 시그니처를 가지고 있습니다.

매개변수의 타입 순서가 다른 경우

만약에 두 개의 매개변수를 갖는 함수를 오버로딩하는데, 매개변수의 순서가 다르다면 어떻게 해야 할까요? TypeScript에서는 매개변수의 이름과 순서가 함수 시그니처에 포함되지 않기 때문에 매개변수의 타입 순서가 다른 경우 함수 오버로딩을 지원하지 않습니다. 대신 유니온 타입이나 튜플을 사용하여 다양한 매개변수 유형을 허용할 수 있습니다.

예를 들어, 숫자형 매개변수를 받는 add 함수에 대해 다음과 같이 오버로딩을 구현할 수 있습니다.

function add(x: number, y: number): number;
function add(x: [number, number]): number;
function add(x: number | [number, number], y?: number): number {
  if (Array.isArray(x)) {
    return x[0] + x[1];
  }
  return x + (y as number);
}

이렇게 하면 숫자형 매개변수를 각각 받거나 숫자형을 요소로 갖는 배열을 받는 두 가지 시그니처를 가진 add 함수를 정의할 수 있습니다.

결론

TypeScript에서 함수 오버로딩을 사용하여 매개변수의 타입 순서가 다른 경우를 처리하는 방법에 대해 알아보았습니다. 매개변수의 순서가 다른 경우에는 함수 오버로딩 대신 유니온 타입이나 튜플을 활용하여 다양한 매개변수 유형을 지원할 수 있습니다.

참조: TypeScript Handbook - Function Overloading

이상으로 TypeScript에서 함수 오버로딩과 매개변수의 타입 순서가 다른 경우에 대해 알아보았습니다. 문의사항이 있으시면 언제든지 말씀해주세요!