Overloading

서로 다른 여러 개의 함수가 서로 다른 여러개의 Signature를 가질 때 발생한다.

type Add = {
    (a: number, b:number) : number
    (a: number, b:string) : number
}

const add : Add = (a,b) => {
    if(typeof b === "string") return a
    return a+b;
}
type Add = {
    (a: number, b:number) : number
    (a: number, b:number, c:number) : number
}

// c가 option 인 경우 (추가 옵션인경우)
// 선택사항
const add : Add = (a,b,c?:number) => {
    if(c) return a + b + c;
    return a + b
}

add(1,2);
add(1,2,3);