오버로드의 약속은 선언에서 고르고, 구현에서 지킨다

호출부는 가장 구체적인 오버로드 시그니처로 결과 타입을 얻고, 런타임에는 모든 경우를 받는 구현 함수 하나만 실행된다.

1 호출

입력 형태를 확정한다

process("abc")

인자의 타입과 개수로 후보 시그니처를 좁힌다.

2 선택

공개 선언을 고른다

(input: string): string

호출자는 선택된 선언의 반환 타입만 보게 된다.

3 실행

넓은 구현으로 모은다

input: string | number

구현 시그니처는 모든 공개 선언을 수용해야 한다.

4 분기

타입 가드로 나눈다

typeof input === "string"

실제 값의 형태를 확인한 뒤 알맞은 로직을 실행한다.