함수를 매개변수의 개수나 타입에 따라 여러가지 버전으로 정의하는 방법
자바스크립트에서는 지원이 안되고, 타입스크립트에서만 지원한다.
함수의 구현부 없이 선언식만 써놓은걸 오버로드 시그니처라고 한다.
아래처럼 오버로드 시그니처들만 만들면 에러가나지만 구현시그니처부분을 만들어주는 순간 에러가 없어진다.
function func(a:number):void;
function func(a:number, b:number, c:number):void;
어떤 함수가 오버로드 시그니처를 가지고 있으면 함수 호출 시 실제 구현부의 매개변수나 타입에 따르지않고, 오버로드 시그니처들 중 하나의 버전을 따라가게된다.
하나의 func함수에서 매개변수가 1개일경우 *20, 3개일경우 모두 더해주는 함수이다. 1번째 오버로드 시그니처를 의미있게 만들어 주기 위해 b,c매개변수는 선택적 매개변수로 지정했다.
function func(a:number, b?:number, c?:number){
if(typeof b ==='number' && typeof c ==='number') {
console.log(a+b+c); // 두번째 오버로드 시그니처
} else {
console.log(a*20) // 첫번째 오버로드 시그니처
}
};
오버로드시그니처를 만들어서 사용하게되면 함수 호출 시 만들어둔 케이스에 맞에 인수를 넣어줘야한다.
**func(); // 에러 인수개수부족**
func(1);
**func(1,2); //에러 인수개수가 안맞음**
func(1,2,3);

그냥 func() 호출시에도 에러가난다.