2022-9-10

48 阅读1分钟

算法

  1. 了解二叉搜索树的特性
  2. 通过递归遍历,判断是否符合二叉搜索树的特性

TypeScript

Awaited 返回Promise包裹的类型

// ============= Test Cases =============
import type { Equal, Expect } from './test-utils'

type X = Promise<string>
type Y = Promise<{ field: number }>
type Z = Promise<Promise<string | number>>

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

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


// ============= Your Code Here =============
// 重点是infer:在条件语句中推断新的类型,用于解包;然后考虑边界需要一个递归
type MyAwaited<T> = T extends Promise<infer U>
  ? U extends Promise<any>
    ? MyAwaited<U>
    : U
  : error