If we have a type which is wrapped type like Promise. How we can get a type which is inside the wrapped type? For example if we have Promise<ExampleType> how to get ExampleType?
문제는 타입의 unwrap 을 할수있는지 물어본다. unwrap 이란 무엇인가? Promise<string> 이 있을 때 Promise 를 언랩핑하면 string 이라는 inner type 을 얻을 수 있다.
// 0. 시작typeAwaited=any// 1. Awaited 의 제네릭으로 들어는 T는 Promise<> 의 형태여야한다.typeAwaited<TextendsPromise<any>> =any// 2. T 가 Promise<> 을 extends 하는지 알아본다. 만약 알맞은 형태라면 aa 가 inner type 이 된다.typeAwaited<TextendsPromise<unknown>> =TextendsPromise<> ?aa:bb// 3. Promise 의 <> 에는 어떠한 타입이든지 다 들어올 수 있다. 따라서 '추론' 하자// 추론된 타입은 R 이다.typeAwaited<TextendsPromise<unknown>> =TextendsPromise<inferR> ?aa:bb// 4. Awaited의 제네릭 인자로 들어온 형태가 알맞은 Promise 형태라면, 추론한 R 을 리턴하면 된다.typeAwaited<TextendsPromise<unknown>> =TextendsPromise<inferR> ?R:T
// 1. 제레릭 인자로 들어오는 T 의 타입은 Promise<any> 다.// 그리고 우리는 any 의 타입을 추론해서 결정하고싶음typeAwaited=anytypeAwaited<T> = ....typeAwaited<TextendsPromise<any>> = ...;typeAwaited<TextendsPromise<any>> =TextendsPromise<> ?xx:yy;typeAwaited<TextendsPromise<any>> =TextendsPromise<inferR> ?R:T;