推荐答案
Awaited<T> 是 TypeScript 4.5 引入的一个实用类型,用于递归地解包 Promise 类型,最终返回 Promise 的解析值类型。它主要用于处理嵌套的 Promise 类型,确保能够获取到最终的解析值类型。
本题详细解读
作用
Awaited<T> 的主要作用是递归地解包 Promise 类型,直到获取到 Promise 的最终解析值类型。这在处理异步操作时非常有用,尤其是在处理嵌套的 Promise 时,能够确保类型推断的准确性。
实现原理
Awaited<T> 的实现原理是通过递归类型解析来实现的。TypeScript 的类型系统能够递归地解析 Promise 类型,直到获取到最终的解析值类型。以下是 Awaited<T> 的实现方式:
type Awaited<T> =
T extends null | undefined ? T : // 如果 T 是 null 或 undefined,直接返回 T
T extends object & { then(onfulfilled: infer F): any } ? // 如果 T 是一个带有 then 方法的对象(即 Promise)
F extends ((value: infer V, ...args: any) => any) ? // 如果 then 方法的第一个参数是一个函数
Awaited<V> : // 递归解析 V
never : // 否则返回 never
T; // 如果 T 不是 Promise,直接返回 T示例
type Example1 = Awaited<Promise<string>>; // string type Example2 = Awaited<Promise<Promise<number>>>; // number type Example3 = Awaited<Promise<Promise<Promise<boolean>>>>; // boolean
在这个示例中,Awaited<T> 能够正确地解析出嵌套 Promise 的最终解析值类型。