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