타입 스크립트 call signature와 오버 로딩

Seong·2022년 11월 9일
0

Type_Script

목록 보기
2/7

call signature

함수의 타입을 지정하기

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

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

함수의 타입을 먼저 지정하고 함수를 구현한다

오버 로딩

오버 로딩: 같은이름을 가지고 있으나 매개변수, 리턴타입 등을 다르게 설정해서 같은이름을 중복으로 사용하는것

자바에서 메소드 오버로딩은 많이 써봤었다.

타입스크립트에서의 함수 오버 로딩 활용:

//선언부
function normal(num: number): void;
function normal(str: string, arr: string): void;

//구현부
function normal(a: any, b?: string): void {
  console.log(typeof (a), typeof (b));

}
normal(1)
normal('하이', '하이');
// normal(1,'하이'); 인자의 타입이 일치하지않아서 에러

call signature를 활용한 방식

매개변수 갯수 체크

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

const add: Add = (a, b, c?: number) => {   //추가 파라미터는 옵션임
  if (c) return a + b + c;
  return a + b;
}

add(1,2)  //3
add(1,2,3) //6
// add(1,2,3,4) 인자의 수가 맞지 않아서 에러

매개변수의 Type 체크

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);
}

push('하이')   //하이
push({ path: '경로', state: { 오브젝트: '출력' } })  //경로
// push({path:'경로'});   인자가 string도 아니고 Config타입도 아니여서 에러

자바에서 메소드 오버로딩은 그냥 하면 됐는데 타입 스크립에서 구현은 성가시다

profile
메모장

0개의 댓글