인자 타입 수집
getLength(["a", "b"])
호출식의 인자 목록과 문맥 타입을 기준으로 후보 탐색을 시작합니다.
TypeScript는 호출 인자에 맞는 오버로드 시그니처를 먼저 고르고, 실제 JavaScript 실행은 하나의 구현 시그니처 본문으로 들어갑니다.
getLength(["a", "b"])
호출식의 인자 목록과 문맥 타입을 기준으로 후보 탐색을 시작합니다.
구현 시그니처는 호출 가능한 API 표면이 아니므로 후보에서 빠집니다.
더 구체적인 시그니처가 먼저 있으면 의도한 반환 타입을 얻기 쉽습니다.
런타임에서는 타입 가드로 실제 값의 형태를 좁혀 분기합니다.
문자열 호출을 위한 공개 계약입니다.
배열 호출과 호환되므로 이 시그니처의 반환 타입이 노출됩니다.
구현용 타입은 넓지만 호출부의 후보 시그니처로 쓰이지 않습니다.
구현 시그니처는 모든 오버로드 인자를 받을 수 있어야 합니다.
각 오버로드의 반환 타입과 실제 반환 경로가 어긋나지 않아야 합니다.
number 호출처럼 공개 오버로드가 없으면 구현이 넓어도 호출은 실패합니다.
관계가 단순하면 overload보다 T, Promise<T> 같은 제네릭이 낫습니다.