[한입] infer(추론)

TK·2023년 12월 21일
0

[강의] 한입 시리즈

목록 보기
55/59

(Inference)

✏️함수 타입에서 리턴 타입만 가져오기

type Func = () => string;

type ReturnType<T> = T extends () => string ? string : never;

type A = ReturnType<Func>; // string

  • 하지만 다음 type Bnever타입이 나온다 (원하는 결과는 number타입)
type FuncA = () => string;
type FuncB = () => number;

type ReturnType<T> = T extends () => string ? string : never;

type A = ReturnType<FuncA>; // string
type B = ReturnType<FuncB>; // never
  • 다음과 같이 코드를 작성하면 참이 되게 하는 타입을 추론해서 R에 들어간다.
type FuncA = () => string;
type FuncB = () => number;

type ReturnType<T> = T extends () => infer R ? R : never;

type A = ReturnType<FuncA>; // string
type B = ReturnType<FuncB>; // number
type C = ReturnType<number>; // never ※추론불가※


✏️promise의 결과타입만 가져오기

type PromiseUnpack<T> = any;
// 요구사항
// 1. T는 프로미스 타입이어야 함
// 2. 프로미스 타입의 결과값 타입을 반환하여야 함

type PromiseA = PromiseUnpack<Promise<number>>;
// number타입원함

type PromiseB = PromiseUnpack<Promise<string>>;
// string타입원함
  • 정답코드
type PromiseUnpack<T> = T extends Promise<infer R> ? R :never;

type PromiseA = PromiseUnpack<Promise<number>>; // number

type PromiseB = PromiseUnpack<Promise<string>>; // string
profile
쉬운게 좋은 FE개발자😺

0개의 댓글