TS) infer에 대해서 짧게 알아보자

2ast·2023년 10월 2일

infer 키워드는 쉽게 말해서, ts 타입 추론에 의한 값을 사용하겠다는 것을 의미한다. 즉, infer R에서 R은 ts가 추론한 타입을 갖는다.

ReturnType이라는 유틸리티 타입의 정의를 살펴보자

type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;

ReturnType은 제네릭으로 (...args: any) => any 꼴의 함수 타입을 받고 있다. 그리고 반환하는 함수부를 해석해보면 다음과 같다.

"제네릭으로 받은 T가 (...args: any) => infer R 형태를 보이면 R을 반환하고, 그렇지 않으면 any를 반환하라."

여기서 infer R은 ts가 자체적으로 추론한 함수의 return type을 의미한다.

const returnString = () =>{
	return 'hi'
}
// returnString은 () => string으로 추론됨

const returnNumber = () =>{
	return 1
}
// returnNumber는 () => number로 추론됨

위 예시에서 () => string으로 추론되는 returnString을 ReturnType에 넘긴다면 (...args: any) => infer R 형태에 () => string 이 대치되면서 R이 string 타입을 갖게 된다.

type returnType1 = ReturnType<typeof returnString>; //string
type returnType2 = ReturnType<typeof returnNubmer>; //number
profile
React-Native 개발블로그

0개의 댓글