1type Awaited<T> = any; // implementation23type Step1 = Awaited<Promise<Promise<string | undefined>>>;4type Step2 = Awaited<Promise<string | undefined>>;5type Result = string | undefined;
Seventh challenge is Awaited
It's available since TypeScript 4.5 🔥🔥🔥
Promise and gets the value in the same way.
Sometimes it's useful to get the value even if it's double wrapped with
Promise so this is also possible.
Type inference in conditional types is defined in TypeScript as following:
Within the extends clause of a conditional type, it is now possible to have infer declarations that introduce a type variable to be inferred. Such inferred type variables may be referenced in the true branch of the conditional type
1type ReturnType<T> = T extends (...args: any) => infer R ? R : any;
As we want to unbox double or maybe thrice wrapped
Promise we need Recursive Conditional Types:
1type ElementType<T> = T extends ReadonlyArray<infer U> ? ElementType<U> : T;
It's available since TypeScript 4.1 and allows us to do so with
1type Awaited<T> = T extends Promise<infer U> ? Awaited<U> : T;
This is it ⭐️
Don't forget to check the solution on Playground – https://tsplay.dev/mqQxkm 🚀typescript