이상하게 보이나요? 하지만 타입스크립트에서는 이렇게 오버로딩합니다. 처음 두 선언은 타입만 있고 함수의 구현부(implementation)가 없습니다. 마지막 선언은 구현부는 있으나 매개변수의 타입이 any입니다. any를 명시적으로 사용한 처음이자 마지막 사례입니다. any를 제거하면 implicitAny 에러가 발생하여 어쩔 수 없이 넣었습니다. 다만 x와 y가 실제로 any가 되는 것이 아니라 오버로딩한 타입의 조합({x: number, y: number}, {x: string, y: string})만 가능합니다.
add(1, '2')와 add('1', 2)에서 발생하는 에러 메시지를 보면 Overload 1 of 2, Overload 2 of 2가 나옵니다. of 뒤에 나오는 숫자가 타입스크립트가 인식하는 오버로딩의 개수입니다. 함수의 호출이 두 오버로딩 중 어디에도 해당하지 않아 에러가 발생했다고 알리고 있습니다.