동일한 이름에 매개 변수와 매개 변수 타입 또는 리턴 타입이 다른 여러 버전의 함수
를 만드는 것을 말합니다. TypeScript에서는 오버로드 signatures을 작성하여 "다양한 방식으로 호출할 수 있는 함수"를 지정할 수 있습니다
overloading의 개념은 객체지향에서 상속된 클래스의 메소드에서, 메소드의 이름은 동일하지만 return 값의 타입이나 parameter의 타입과 개수를 달리하여 새로운 메소드를 여러개 정의하는 개념과 같습니다.
<aside>
💡 What is call signature
? (호출 서명이란 무엇입니까?)
함수의 인수 및 반환 값의 유형입니다.
</aside>
type Add = {
(a: number, b: number): number
(a: number, b: string): number
}
// ==
type Add = {
(a: number, b: number | string): number
}
const add: Add = (a, b) => {
if(typeof b === 'string') return a;
return a + b;
}
type Config = {
path: string
state: object
}
type Push = {
(path: string): void
(config: Config): void
}
const push: Push = (config) => {
if(typeof config === 'string') console.log(config)
else console.log(config.path, config.state)
}
type Add = {
(a: number, b: number, c: number): number
(a: number, b: number): number
}
// ==
type Add = (a: number, b: number, c?: number) => number;
const add: Add = (a, b, c?: number) => {
if (c !== undefined) return a + b + c;
return a + b;
}