Skip to content

Awaited

题目

假如我们有一个 Promise 对象,这个 Promise 对象会返回一个类型。

在 TS 中,我们用 Promise<T> 中的 T 来描述这个 Promise 返回的类型。

请你实现一个类型,可以获取这个类型。

例如:Promise<ExampleType>,请你返回 ExampleType 类型。

ts
type ExampleType = Promise<string>;

type Result = MyAwaited<ExampleType>; // string

这个挑战来自于 @maciejsikora 的文章:original article

解答

这是第一次遇到递归

ts
type MyAwaited<T extends PromiseLike<any>> = T extends PromiseLike<infer U>
  ? U extends PromiseLike<any>
    ? MyAwaited<U>
    : U
  : never;

精选

Promise 类型需要满足 Promise A+ 的一切标准,但是开发者自己实现的 Promise 有可能并不标准,比如只有 .then 方法。所以需要使用 PromiseLike 类型

Released under the MIT License.