개발/Typescript

Typescript infer 키워드, 함수 반환값 구하기

2021. 1. 2. 18:12
/**
 * Obtain the return type of a function type
 */
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;

ReturnType, es5 타입스크립트 기본 라이브러리에 들어있는, 함수의 리턴 타입을 알아내는 타입 함수(?)다.

 

infer 키워드는 extends 구문에서, 아무데에나 들어가서 그 위치에 들어갈 수 있는 최대한의 타입을 유추한다. 그리고 그것을 extends 문이 참일 때 반환될 구문에서 사용할 수 있다. 

 

 

 

위 함수를 보면 문제점을 하나 알 수 있는데, 함수가 입력에 따라서 반환값의 타입이 바뀌는 경우 이를 정확히 찾아낼 수 없다는 것이다. 이를 해결하기 위해서 GetReturnType이라는 함수를 만들어 보자.

 

type GetReturnType<T extends (...args : any) => any, Args extends any[]> = T extends (...args : Args) => infer A ? A : never;

type F = ((input : number) => number) | ((input : string) => string);
type A = GetReturnType<F, any>; // number | string
type N = GetReturnType<F, [number]>; // number
type S = GetReturnType<F, [string]>; // string

편안...

입력의 타입에 따라서 알맞는 반환값이 튀어나오는 모습을 볼 수 있다.