00189-easy-awaited

Back

type MyAwaited<T> = T extends Promise<infer C> | { then: (onfulfilled: (arg: number) => any) => any } ? C extends Promise<any> ? MyAwaited<C> : C : never

Solution by tungulin #36715

// 여기 풀이를 입력하세요
type MyAwaited<T> = T extends PromiseLike<infer P> ? MyAwaited<P> : T;

Solution by seungdeok #36662

// your answers
type MyAwaited<T> = T extends PromiseLike<infer R> ? MyAwaited<R> : T

Solution by suchangv #36644

// your answers
type MyAwaited<T> = T extends PromiseLike<infer U> ? U extends PromiseLike<any> ? 
  MyAwaited<U> : U
 : never;

Solution by Vlad080897 #36628

// 你的答案
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 uuimorty #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