// 你的答案
type MyAwaited<T> = T extends PromiseLike<infer P> ? MyAwaited<P> : T
Solution by MrSissel #36583
type MyAwaited
Solution by ChemieAi #36552
type MyAwaited<T extends PromiseLike<any>> =
T extends PromiseLike<infer U>
? U extends PromiseLike<unknown>
? MyAwaited<U>
: U
:never;
Solution by gakki-san #36479
// 你的答案
type MyAwaited<T extends Promise<any>> = T extends Promise<infer K>
? K
: never;
Solution by Morty-X #36462
type MyAwaited<T> = T extends PromiseLike<infer U> ? MyAwaited<U> : T;
Solution by HtmlSeniorDev #36456
// your answers
type MyAwaited<T> = T extends PromiseLike<infer R> ? MyAwaited<R> : T;
Solution by ATravelerGo #36423
// your answers
type MyAwaited<T> =
T extends Promise<infer U>
?
U extends Promise<any>
?
MyAwaited<U>
:
U
:
T extends {then: (a:(b: infer V) => any) => any}
?
V
:never;
Solution by justBadProgrammer #36363
// your answers
Solution by Nadeysha #36339
type MyAwaited<T> = T extends null | undefined ? T :
T extends { then: (onfulfilled: (arg: infer V) => any) => any }
? MyAwaited<V>
: T;
Solution by 1Alex4949031 #36312
type MyAwaited<T> = T extends PromiseLike<infer U>
? U extends PromiseLike<any>
? MyAwaited<U>
: U
: T;
Solution by HelloWook #36301
type MyAwaited<T> = T extends PromiseLike<infer U> ? U extends PromiseLike<any> ? MyAwaited<U> : U : never
Solution by Jace254 #36269
type MyAwaited
Solution by asylbekduldiev #36216
type MyAwaited<T> = T extends PromiseLike<infer F>
? MyAwaited<F>
: T
Solution by AleksandrShcherbackov #36144
type MyAwaited<T extends Promise<any>> = T extends Promise<infer U>
? U extends Promise<any>
? MyAwaited<U>
: U
: never;
Solution by KimKyuHoi #36134
简单翻了一下答案,似乎清一色的都是下面这个答案
type MyAwaited<T extends PromiseLike<any>> = T extends PromiseLike<infer K>
? K extends PromiseLike<any>
? MyAwaited<K>
: K
: never;
但是 TS 原本的 Awaited 是支持非 PromiseLike 类型的,即 Awaited<string> 就是 string 虽然测试用例并没有对这一项进行测试
所以下面这种应该是更接近原版功能的实现?即不满足返回 T,且接受任何类型
type MyAwaited<T> = T extends PromiseLike<infer K>
? K extends PromiseLike<any>
? MyAwaited<K>
: K
: T
Solution by h4nabii #36087
type MyAwaited<T> = T extends PromiseLike<infer Type> ? (Type extends PromiseLike<any> ? MyAwaited<Type> : Type) : T
Solution by karazyabko #36028
// 你的答案
type MyAwaited<T extends PromiseLike<any | PromiseLike<any>>> = T extends PromiseLike<infer R> ? R extends PromiseLike<any> ? MyAwaited<R> : R : null
Solution by reonce #36009
type MyAwaited<T> = T extends PromiseLike<infer U> ? MyAwaited<U> : T;
Solution by chen8840 #35947
type MyAwaited<T> = T extends Promise<infer I>
? MyAwaited<I>
: T extends { then: (onfulfilled: (arg: infer Arg) => any) => any }
? Arg
: T
type MyAwaited<T> = T extends PromiseLike<infer Res>
? Res extends PromiseLike<any>
? MyAwaited<Res>
: Res
: T
Solution by EvilEl #35871
// 你的答案
type MyAwaited<T> = T extends PromiseLike<infer K> ? MyAwaited<K> : T
Solution by naruto-823 #35790
type MyAwaited<T> =
T extends PromiseLike<infer Res>
? Res extends PromiseLike<any>
? MyAwaited<Res>
: Res
: T
Solution by XenoPOMP #35741
// 你的答案
type MyAwaited<T extends Promise<unknown>> = T extends Promise<infer K>
? K
: never
Solution by ndwgg #35544
type MyAwaited<T extends PromiseLike<any>> = T extends PromiseLike<infer P> ? P extends PromiseLike<unknown> ? MyAwaited<P> : P : never;
Solution by gangnamssal #35479
type MyAwaited<T> = T extends PromiseLike<infer U> ? MyAwaited<U> : T;
Solution by RanungPark #35436
type MyAwaited<T> = T extends PromiseLike<infer U> ? MyAwaited<U> : T;
Solution by RanungPark #35435
type MyAwaited<T> = T extends { then: (onfulfilled: (arg: infer R) => any) => any } ? MyAwaited<R> : T;
Solution by sesolaga #35385
type MyAwaited<T> = T extends PromiseLike<infer U> ? MyAwaited<U> : T
Solution by gyeounjeong #35357
// 你的答案
type MyAwaited<T> = T extends Promise<infer R> ? R extends Promise<infer M> ? MyAwaited<R> : R : T extends {
then:(arg1:(arg2:infer Q)=>any,...args:any)=>any} ? Q :never
Solution by front-end-Dean #35268
type MyAwaited<T> = T extends PromiseLike<infer U> ? MyAwaited<U> : T
I’m not sure if this is correct, but the test cases didn’t report any errors.
Solution by kid1110 #35178
// 你的答案
type Thenable<T> = {
then: (onfulfilled: (arg: T) => unknown) => unknown;
}
type MyAwaited<T> = T extends Promise<infer Inner> | Thenable<infer Inner> ? MyAwaited<Inner> : T
Solution by HoseaGuo #35127