Typescript에는 함수를 이용하여 함수의 반환 타입을 만들 수 있는 유틸리티 타입인 ReturnType이 있는데, 아래와 같이 생겼습니다.
type ReturnType<
T extends (...args: any) => any
> = T extends (...args: any) => infer R ?
R : any;
여기서 infer
라는 키워드를 볼 수 있는데, 이 infer
의 사전적 의미로는 “추론”이라는 뜻이 있습니다. 단순히 ReturnType을 읽어보면, T
는 (…args: any) ⇒ any
함수의 Type 집합 안에 있고, T
의 결과값을 R
이라는 값으로 추론합니다.
즉, infer
는 extends
키워드를 이용하여 새로운 Type으로 치환하여 이 치환된 Type을 이용할 수 있도록 도와주는 키워드입니다.