더북(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이므로 실행할 때 에러가 발생할 것입니다. 애초에 구현부와 일치하게 타입 선언하지 않았기에 문제가 생길 수밖에 없습니다. 오버로딩의 순서는 좁은 타입부터 넓은 타입순으로 오게 해야 문제가 없습니다.