함수 오버로딩이란 하나의 함수를 매개변수의 개수나 타입에 따라 다르게 동작하도록 만드는 문법으로, TypeScript에서는 지원하지만 JavaScript에서는 지원하지 않는다.
타입스크립트에서 함수 오버로딩을 구현하려면 다음과 같이 버전별 오버로드 시그니쳐를 만들어 주어야 한다.
// 버전들 -> 오버로드 시그니쳐
function func(a: number): void;
function func(a: number, b: number, c: number): void;
이렇게 구현부 없이 선언부만 만들어둔 함수를 오버로드 시그니쳐라고 한다.
그 다음 실제로 함수가 어떻게 실행될 것인지를 정의하는 부분인 구현 시그니쳐를 만들어 주어야 한다.
구현 시그니쳐의 매개변수 타입은 모든 오버로드 시그니쳐와 호환되도록 만들어야 한다.
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);
}
}