TIL

[ TypeScript ] 타입 스크립트의 Call Signatures 과 Overloading.

dev_gggimmmin 2024. 3. 11. 22:15
728x90

 

 

Call Signatures

//Call Signature

type Add = (a: number, b: number) => number;

const add: Add = (a, b) => a + b

 

Call(=Functions)Signature 란 함수의 매개변수와 반환 값의 타입을 모두 type으로 미리 선언하는 것.

* React 에서 함수로 props를 보낼 때, 어떻게 작동할지 미리 설계 가능.

* Type Alias 와 같은거 아닌가? Alias 는 type Name = string의 형태, call signature는 함수의 인자, 리턴 타입의 형태이다.

 

 

Overloading

//overloading

=> 매개변수의 데이터 타입이 다른 경우 예외 처리

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 Add2 = {
(a: number, b: number): number,
(a: number, b: number, c: number): number
}

const add2: Add2 = (a, b, c?: number) => {
if (c) return a + b + c;
return a + b;
}

위와 같은 함수는 거의 없지만 외부 라이브러리에서 활용될 수 있다고 한다.

 

//overloading in Next.js

router.push("/home");

router.push({
path: "/home",
state: 1
});

=> 예를 들어, Next.js의 라우터 push가 대충 두 가지 방법으로 페이지를 이동한다고 할 때,

type Config = {
path: string,
state: number
}

type Push = {
(config: Config): void,
(config: string): void
}

const push: Push = (config) => {
if (typeof config === "string") console.log(config);
else console.log(config.path);
}

=> 패키지나 라이브러리는 위와 같이 두 가지 경우의 Overloading으로 디자인되어 있을 것이다

 

Overloading 은 한마디로, 

파라미터만 달라지고, 비슷한 로직이 반복되는 경우에 사용할 수 있으며
코드의 중복을 줄이고 재사용성을 높이기 위해 사용하는 것 같다.

728x90