인프런 커뮤니티 질문&답변
함수 타입 호출 시그니처
작성
·
12
0
함수 타입 표현식이라고 설명하실 때는
type OnChange = (value: string) => void;호출 시그니처 설명하실 떄는
type OnChange2 = {
(value: string): void;
};이런 형태로 각각 말씀해주셨는데요
그럼 함수 타입 표현식이냐, 호출 시그니처냐 차이점은 중괄호 존재 여부인걸까요?
객체 타입처럼 정의된 것이 아니면 호출 시그니처라고 볼 수 없는지 궁금합니다
답변 1
0
이정환 Winterlood
지식공유자
안녕하세요 루룸님 이정환입니다.
함수 타입 표현식과 호출 시그니쳐의 가장 핵심적인 차이점은 함수 타입 표현식은 해당 타입을 함수로 정의한다는 것이고, 호출 시그니쳐는 해당 타입을 객체로 정의한다는 것 입니다.
자바스크립트에서는 함수 또한 객체의 일종으로 분류되기 때문에 일반적인 객체가 그렇듯 프로퍼티를 가질 수 있습니다.
타입스크립트에서 호출 시그니처 문법을 사용하는 이유도 바로 이런 특성(함수도 프로퍼티를 가질 수 있다)을 타입 레벨에서 자연스럽게 표현하기 위해서인데요.
함수 타입 표현식은 “어떤 인자를 받아 어떤 값을 반환하는 함수”라는 호출 형태를 간결하게 나타내는 데 적합한 반면, 호출 시그니처는 여기에 더해 label 같은 추가 프로퍼티를 함께 정의하거나, 여러 형태의 호출을 오버로드처럼 묶어서 표현해야 할 때 특히 유용합니다.
즉, 두 표현은 모두 “호출 가능하다”는 의미를 담고 있지만, 호출 시그니처 쪽이 객체 타입을 기반으로 하기 때문에 확장성이 더 크다고 이해하시면 됩니다.




