Tech/TypeScript

[ TS 기초 ] 함수 - Call signiture / 오버로딩 / 제너릭

닝닝깅 2023. 3. 21. 16:09

Call signiture

Call signiture은 코드에 마우스를 올리면 나오는 타입 정보이다.

 

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

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

함수를 만들기 전 직접 call signiture를 만들어서 type를 미리 선언한 후

 

Overloading

하나의 함수가 여러개의 call signiture를 가지고 있을 때 발생한다.

동일한 이름의 함수에서 파라미터만 달라지고 비슷한 로직이 반복될 때 사용된다.

함수 내에서 파라미터의 타입에 맞게 각각 구현한다.

 

파라미터의 개수가 같을 때

type Add = {
  (a: number, b: number): number;
  (a: number, b: string): number;
};

const add: Add = (a, b) => {
  if (typeof b === "string") return a;
  else return a + b;
};

 

파라미터의 개수가 다를 때

type Add = {
  (a: number, b: number): number;
  (a: number, b: number, c: number): number;
};

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

 

Generics

call signiture를 선언할 때 타입을 잘 모를 때 제너릭을 사용한다.

타입스크립트가 타입을 유추한다.

 

type SuperPrint = {
  <T>(arr: T[]): T;
};

const superPrint: SuperPrint = (arr) => arr[0];

제네릭을 선언하고 처음 사용되는 지점에서 제네릭의 타입이 정해진다 .

 

type Player<E> = {
  name: string;
  extraInfo: E;
};

type Extra = {
    favFood: string
}

type MyPlayer = Player<Extra>