본문 바로가기
강의 실습/한 입 크기로 잘라먹는 타입스크립트(TypeScript)

조건부 타입 기반의 유틸리티 타입 - Exclude, Extract, ReturnType

by Jint 2024. 12. 25.

한 입 크기로 잘라먹는 타입스크립트 - 조건부 타입 기반의 유틸리티 타입들 (Exclude<T, U>, Extract<T, U>, ReturnType<T>)


1. Exclude<T, U>
T에서 U를 제거하는 타입.

- chapter3.ts

/**
 * Exclude<T, U>
 * -> 제외하다, 추방하다
 * -> T에서 U를 제거하는 타입
 */
/* 원본 유틸리티 타입
type Exclude<T, U> = T extends U ? never : T;
*/

// 직접 만들기 : 조건부 타입(유니온 타입 전달시 분산적인 조건부 타입)
type Exclude<T, U> = T extends U ? never : T;
// 1 단계
// Exclude<string, boolean> |
// Exclude<boolean, boolean>

// 2 단계
// string |
// never (공집합)

// 최종
// string

type A = Exclude<string | boolean, boolean>;



2. Extract<T, U>
T에서 U를 추출하는 타입.

- chapter3.ts

...
/**
 * Extract<T, U>
 * -> T에서 U를 추출하는 타입
 */
/* 원본 유틸리티 타입
type Extract<T, U> = T extends U ? T : never;
*/

// 직접 만들기 : 조건부 타입(유니온 타입 전달시 분산적인 조건부 타입)
type Extract<T, U> = T extends U ? T : never;

type B = Extract<string | boolean, boolean>;



3. ReturnType<T>
함수의 반환값 타입을 추출하는 타입.

- chapter3.ts

...
/**
 * ReturnType<T>
 * -> 함수의 반환값 타입을 추출하는 타입
 */
/* 원본 유틸리티 타입
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;
*/

// 직접 만들기 : 조건부 타입, infer(조건부 타입 내에서 타입 추론)
type ReturnType<T extends (...args : any) => any> = T extends (...args: any) => infer R ? R : never;

function funcA() {
    return 'hello';
}
function funcB() {
    return 10;
}
type ReturnA = ReturnType<typeof funcA>;
type ReturnB = ReturnType<typeof funcB>;



참고링크 : https://www.inflearn.com/course/%ED%95%9C%EC%9E%85-%ED%81%AC%EA%B8%B0-%ED%83%80%EC%9E%85%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8#

 

한 입 크기로 잘라먹는 타입스크립트(TypeScript) 강의 | 이정환 Winterlood - 인프런

이정환 Winterlood | 문법을 넘어 동작 원리와 개념 이해까지 배워도 배워도 헷갈리는 타입스크립트 이제 제대로 배워보세요! 여러분을 타입스크립트 마법사🧙🏻‍♀️로 만들어드립니다., 프론

www.inflearn.com

댓글