type MyAwaited<T> = T extends PromiseLike<infer U> ? MyAwaited<U> : T;
Solution by gangukss #33589
type MyAwaited<T> =
T extends Promise<infer R> | PromiseLike<infer P>
? MyAwaited<R | P>
: T
Solution by Danny101201 #33559
type MyAwaited<T> = T extends PromiseLike<infer item> ? MyAwaited<item> : T
Solution by Kolufs #33522
// 你的答案
type MyAwaited : T
Solution by bad-lancer
#33496
After the removal of the faulty test case, this is the new and much more concise solution
type MyAwaited<T> =
T extends PromiseLike<infer Val>
? MyAwaited<Val>
: T
Solution by pgoodbread #33382
// 여기 풀이를 입력하세요
type MyAwaited<T extends PromiseLike<any>> = T extends PromiseLike<infer U>
? U extends PromiseLike<any>
? MyAwaited<U>
: U
: never
Solution by awesomelon #33353
type MyAwaited<T> = T extends PromiseLike<infer R> ? MyAwaited<R> : T
Solution by daishi-motoyama #33310
type MyAwaited<T extends PromiseLike<any>> = T extends PromiseLike<infer U> ? U extends PromiseLike<any>? MyAwaited<U>:U:never
Solution by Skytim #33293
type MyAwaited
Solution by rookiewxy #33240
type MyAwaited<T extends PromiseLike<any>> = T extends PromiseLike<infer R> ? R extends PromiseLike<any>? MyAwaited<R> : R: never
Solution by xyida #33173
type MyAwaited<T extends PromiseLike<any>> = T extends PromiseLike<infer P> ?
P extends PromiseLike<any> ? MyAwaited<P> : P
: never
Solution by Tubring25 #33166
type MaybeAwaited<T> = T extends Partial<Promise<infer U>> ? MaybeAwaited<U> : T
type MyAwaited<T extends Partial<Promise<any>>> = MaybeAwaited<T>
Solution by JordanMoose #33077
// your answers
type MyAwaited<T> = T extends Promise<infer R>
? MyAwaited<R>
: T extends { then: (callback: (args: infer Args) => unknown) => unknown }
? Args
: T
Solution by KeithChou #33074
type MyAwaited<T extends PromiseLike<any>> = T extends PromiseLike<infer U> ? U extends PromiseLike<any>? MyAwaited<U>: U : never;
Solution by RanungPark #33045
type MyAwaited<T> = T extends PromiseLike<infer R> ? MyAwaited<R> : T;
Solution by maxim-dmi3ev #33010
// 你的答案
type MyAwaited<T extends PromiseLike<any>> = T extends PromiseLike<infer Return>
? Return extends PromiseLike<any>
? MyAwaited<Return>
: Return
: never;
Solution by walker-hzx #32931
type UnwrapPromise<T> = T extends Promise<infer R> ? UnwrapPromise<R> : T;
type MyAwaited<T> = T extends { then: (onfulfilled: (arg: infer R) => any) => any } ? UnwrapPromise<R> : never;
Solution by YJCCreateAHistory #32897
type MyAwaited<T extends PromiseLike<any>> = T extends PromiseLike<infer U>
? U extends PromiseLike<any>
? MyAwaited<U>
: U
: never;
Solution by Yasunori-aloha #32666
// 你的答案
type MyAwaited<T> = T extends PromiseLike<infer R> ? MyAwaited<R> : T
Solution by unmagic #32529
// 你的答案
type MyAwaited<T extends PromiseLike<unknown>> = T extends PromiseLike<infer R> ? R extends PromiseLike<unknown> ? MyAwaited<R> : R : never
示例:
type Result = MyAwaited<ExampleType> // string
type Result2 = MyAwaited<ExampleType2> // string
Solution by Jabo2017 #32502
// your answers
type MyAwaited<T> = T extends Promise<infer P> ? MyAwaited<P>: T extends {
then: (onfulfilled: (arg: infer S) => any) => any }
? S : T
Solution by YuFengDing #32483
// your answers
type thenwrq<T> = Pick<Promise<T>, 'then'>
type MyAwaited<T extends thenwrq<any>> = T extends thenwrq<infer R>
? R extends thenwrq<any>
? MyAwaited<R>
: R
: never;
Solution by wrq1663 #32447
// your answers
Solution by wrq1663 #32446
type MyAwaited<T extends PromiseLike<any>> = T extends PromiseLike<infer U> ? U extends PromiseLike<infer X> ? X extends PromiseLike<infer Z> ? Z : X : U : never
I don't think this is the best solution. How do you make a loop with the first one ?
Solution by solarpush #32168
type MyAwaited<T extends PromiseLike<any>> =
T extends PromiseLike<infer F>
? (F extends PromiseLike<any> ? MyAwaited<F> : F)
: never
If T
doesn't extends from a promise, then we type as never
(maybe T itself as well, in the test it really doesn't matter)
if T
extends from a promise of a type F
that is not a promise, we type as F
if F
extends from a promise, we recursively type it as MyAwait<F>
The key here is infer
keyword to extract the type of the promise
Solution by joyanedel #32129
type MyAwaited<T extends PromiseLike<any>> =
T extends PromiseLike<infer U>
? U extends PromiseLike<any>
? MyAwaited<U>
: U
: never
Solution by dev-hobin #32114
// your answers
type MyAwaited<T> = T extends PromiseLike<(infer R)>
? R extends PromiseLike<(infer V)> ? MyAwaited<V> : R
: T
Solution by Rustamaha #31943
type MyAwaited<T> = T extends Promise<infer R> ?
R extends Promise<any> ?
MyAwaited<R>:
R
:never
Solution by kimud6003 #31833
type MyAwaited<T extends PromiseLike<any>> = T extends PromiseLike<infer U> ? U extends PromiseLike<any> ? MyAwaited<U> : U : never
Solution by yosukekato165 #31710
type MyAwaited<T extends PromiseLike<any>> = T extends PromiseLike<infer U> ?
U extends PromiseLike<any> ? MyAwaited<U> : U : never
Solution by yosukekato165 #31693