강의

멘토링

커뮤니티

Inflearn Community Q&A

seong08145945's profile image
seong08145945

asked

Bite-Sized TypeScript

함수 타입 호출 시그니처

Resolved

Written on

·

46

0

함수 타입 표현식이라고 설명하실 때는

type OnChange = (value: string) => void;

호출 시그니처 설명하실 떄는

type OnChange2 = {
    (value: string): void;
};

이런 형태로 각각 말씀해주셨는데요

그럼 함수 타입 표현식이냐, 호출 시그니처냐 차이점은 중괄호 존재 여부인걸까요?

객체 타입처럼 정의된 것이 아니면 호출 시그니처라고 볼 수 없는지 궁금합니다

typescript

Answer 1

0

winterlood님의 프로필 이미지
winterlood
Instructor

안녕하세요 루룸님 이정환입니다.

함수 타입 표현식과 호출 시그니쳐의 가장 핵심적인 차이점은 함수 타입 표현식은 해당 타입을 함수로 정의한다는 것이고, 호출 시그니쳐는 해당 타입을 객체로 정의한다는 것 입니다.

자바스크립트에서는 함수 또한 객체의 일종으로 분류되기 때문에 일반적인 객체가 그렇듯 프로퍼티를 가질 수 있습니다.

타입스크립트에서 호출 시그니처 문법을 사용하는 이유도 바로 이런 특성(함수도 프로퍼티를 가질 수 있다)을 타입 레벨에서 자연스럽게 표현하기 위해서인데요.

함수 타입 표현식은 “어떤 인자를 받아 어떤 값을 반환하는 함수”라는 호출 형태를 간결하게 나타내는 데 적합한 반면, 호출 시그니처는 여기에 더해 label 같은 추가 프로퍼티를 함께 정의하거나, 여러 형태의 호출을 오버로드처럼 묶어서 표현해야 할 때 특히 유용합니다.

즉, 두 표현은 모두 “호출 가능하다”는 의미를 담고 있지만, 호출 시그니처 쪽이 객체 타입을 기반으로 하기 때문에 확장성이 더 크다고 이해하시면 됩니다.

seong08145945's profile image
seong08145945

asked

Ask a question