더북(TheBook)
function example(param: string | null): number;
function example(param: string): string;
function example(param: string | null): string | number {
  if (param) {
    return 'string';
  } else {
    return 123;
  }
}

const result = example('what');
// const result: number

resultnumber로 바뀝니다. 다만 실제로는 resultstring이므로 실행할 때 에러가 발생할 것입니다. 애초에 구현부와 일치하게 타입 선언하지 않았기에 문제가 생길 수밖에 없습니다. 오버로딩의 순서는 좁은 타입부터 넓은 타입순으로 오게 해야 문제가 없습니다.

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