더북(TheBook)

타입스크립트는 함수에 오버로딩이 있을 때 위에서부터 순서대로 검사합니다.

a(param)의 경우: errorAparamstring | number인데 aparamstring이나(첫 번째 오버로딩) number라서(두 번째 오버로딩) 에러가 발생합니다.

b(p1, p2)의 경우: errorBp2number | undefined인데 bp2는 없거나(첫 번째 오버로딩) number라서(두 번째 오버로딩) 에러가 발생합니다.

오버로딩을 제거하면 에러 메시지가 사라집니다.

function a(param: string | number) {}

function errorA(param: string | number) {
  a(param);
}

function b(p1: string, p2?: number) {}

function errorB(p1: string, p2: number | undefined) {
  b(p1, p2);
}

유니언이나 옵셔널 매개변수를 활용할 수 있는 경우는 오버로딩을 쓰지 않는 게 좋습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.