// overloading
type Config = {
path: string,
state: number
}
type Push = {
(path: string): void, // call signature을 다르게 표현하는 방법
(config: Config): void // Config 타입을 오버로딩 해서 파라미터를 string(path) 하나만 받을 수도 있고 Config타입에 맞게 받을수 있음
}
const push: Push = (config) => {
if (typeof config === "string") {
console.log(config)
} else {
console.log(config.state)
}
}
type Add = {
(a:number, b:number) : number
(a:number, b:number, c:number) :number,
// 여러개의 call signature 보유 타입
}
const add:Add = (a, b, c?:number) => {
//공통적이지만 가장 작은 수의 인자를 가지고 있는 call signature에서 추가적으로 더 인수가 들어온 callsignature의 인자는 optional로 함수호출시 지정해주어야한다
if(c) return a+b+c
return a+b
}