[F-Lab 모각코 챌린지 - 69일차] - 타입스크립트 챌린지 - Awaited

Big One·2023년 7월 18일
0

F-Lab

목록 보기
69/69

Hello World

문제

// string이 되어야 합니다.
type HelloWorld = any

// 아래의 테스트가 통과하도록 만드세요.
type test = Expect<Equal<HelloWorld, string>>

풀이

type HelloWorld = string;

Awaited

문제

type MyAwaited<T> = any

/* _____________ 테스트 케이스 _____________ */
import type { Equal, Expect } from '@type-challenges/utils'

type X = Promise<string>
type Y = Promise<{ field: number }>
type Z = Promise<Promise<string | number>>
type Z1 = Promise<Promise<Promise<string | boolean>>>
type T = { then: (onfulfilled: (arg: number) => any) => any }

type cases = [
  Expect<Equal<MyAwaited<X>, string>>,
  Expect<Equal<MyAwaited<Y>, { field: number }>>,
  Expect<Equal<MyAwaited<Z>, string | number>>,
  Expect<Equal<MyAwaited<Z1>, string | boolean>>,
  Expect<Equal<MyAwaited<T>, number>>,
]

// @ts-expect-error
type error = MyAwaited<number>

풀이

type thenable<T> = { then: (onfulfilled: (arg: T => any) => any }

type MyAwait<T extends Pormise<any> | tenable<any>> = 
	T extends Promise<infer Inner> ?
	  Innder extends Promise<any> ?
		 MyAwait(Inner) :
		 Inner : 
	Textends thenable<innder U> ?
		U : 
		never;
profile
이번생은 개발자

0개의 댓글