오버로딩을 선언하는 순서도 타입 추론에 영향을 끼칩니다.
function example(param: string): string;
function example(param: string | null): number;
function example(param: string | null): string | number {
if (param) {
return 'string';
} else {
return 123;
}
}
const result = example('what');
// const result: string
'what'은 string이므로 첫 번째 오버로딩과 두 번째 오버로딩 모두에 해당될 수 있습니다. 이처럼 여러 오버로딩에 동시에 해당될 수 있는 경우는 제일 먼저 선언된 오버로딩에 해당됩니다. 따라서 result는 첫 번째 오버로딩의 반환값 타입인 string입니다. 오버로딩 순서를 바꿔볼까요?