00189-easy-awaited

Back

// 你的答案
type MyAwaited<T> = T extends PromiseLike<infer P> ? MyAwaited<P> : T

Solution by MrSissel #36583

type MyAwaited = T extends Promise ? MyAwaited : T

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 = T extends PromiseLike ? 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