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

    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);
    }
    

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

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