함수타입 표현식과 호출 시그니쳐

woodstock·2024년 1월 27일
0
post-thumbnail

함수 타입 표현식

타입별칭을 이용해 함수의 타입을 별도로 정의하는 문법을 함수 타입 표현식이라고 한다.

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

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

이렇게 함수 타입 표현식을 이용하면 함수 선언 및 구현 코드와 타입 선언을 분리할 수 있어 유용하며, 아래와 같이 동일한 타입의 함수가 여러개 추가되어도 타입 정의만 해주면 되기때문에 매우 편리하다.


다만, 함수 타입 표현식이 반드시 타입 별칭과 함께 사용되어야 하는 것은 아니다. 아래와 같이 사용해도 문제 없다.

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


호출 시그니쳐

호출 시그니쳐(Call Signature)는 함수 타입 표현식과 동일하게 함수의 타입을 별도로 정의하는 방식이다.

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

const add2: Operation2 = (a, b) => a + b;
const sub2: Operation2 = (a, b) => a - b;
const multiply2: Operation2 = (a, b) => a * b;
const divide2: Operation2 = (a, b) => a / b;

자바스크립트에서는 함수도 객체이기 때문에, 위 코드처럼 객체를 정의하듯 함수의 타입을 별도로 정의할 수 있다.


또한, 다음과 같이 호출 시그니쳐 아래에 프로퍼티를 추가 정의하는 것도 가능하다.

이는 함수이자 일반 객체를 의미하는 타입으로 정의되며 하이브리드 타입이라고 부른다.

profile
해내는 사람

0개의 댓글