// 함수의 Call Signature 정의
type Add = (a: number, b: number) => number;
// 함수 선언과 함께 Call Signature를 적용
const add: Add = (x, y) => {
return x + y;
};
ℹ️ 콜 시그니처는 아래와 같은 방법으로 여러개를 정의할 수 있다
type Add ={
(a:number,b:number):number,
(a:number,b:string):number
}
// 오버로드 시그니처 (Overload Signatures)
function add(a: number, b: number): number;
function add(a: string, b: string): string;
// 구현 시그니처 (Implementation Signature)
function add(a: any, b: any): any {
return a + b;
}
// 함수 호출
console.log(add(5, 3)); // 8
console.log(add("Hello, ", "world!")); // Hello, world!
// 오버로드 시그니처 (오버로드를 위한 시그니처 선언 표현)
function sum(a: number, b: number): number;
function sum(a: number, b: number, c: number): number;
// 구현 시그니처
function sum(a: number, b: number, c?: number): number {
if (c !== undefined) {
return a + b + c;
}
return a + b;
}
// 함수 호출
console.log(sum(1, 2)); // 3
console.log(sum(1, 2, 3)); // 6
interface Circle {
kind: "circle";
radius: number;
}
interface Square {
kind: "square";
sideLength: number;
}
// 오버로드 시그니처
function createShape(shape: "circle", radius: number): Circle;
function createShape(shape: "square", sideLength: number): Square;
// 구현 시그니처
function createShape(shape: string, size: number): Circle | Square {
if (shape === "circle") {
return { kind: "circle", radius: size };
} else {
return { kind: "square", sideLength: size };
}
}
// 함수 호출
const circle = createShape("circle", 10);
const square = createShape("square", 10);
console.log(circle); // { kind: 'circle', radius: 10 }
console.log(square); // { kind: 'square', sideLength: 10 }