Exclude<T, U>
는 다음과 같이 T
로부터 U
를 제거하는 타입이다.
type A = Exclude<string | boolean, string>;
// boolean
직접 구현하면 다음과 같다.
type Exlcude<T, U> = T extends U ? never : T;
Extract<T, U>
는 다음과 같이 T
로 부터 U
를 추출하는 타입이다.
type B = Extract<string | boolean, boolean>;
// boolean
직접 구현하면 다음과 같다.
type Extract<T, U> = T extends U ? T : never;
ReturnType<T>
은 타입변수 T
에 할당된 함수 타입의 반환값 타입을 추출하는 타입이다.
type ReturnType<T extends (...args: any) => any> = T extends (
...agrs: any
) => infer R
? R
: never;
function funcA() {
return "hello";
}
function funcB() {
return 10;
}
type ReturnA = ReturnType<typeof funcA>;
// string
type ReturnB = ReturnType<typeof funcB>;
// number