前端/移动开发面试题更新 2026-08-05

请解释 TypeScript 内置工具类型 Awaited 的功能和用途。

前端/移动开发技术原理TypeScript

考察说明

考查对 TypeScript 内置工具类型 Awaited 的理解及其在异步编程中的应用。

回答思路

  1. 【回答框架 1】Awaited<T> 是 TypeScript 4.5 引入的内置条件类型,用于递归地提取 Promise 或 thenable 对象的 fulfilled 值类型。它模拟了 await 表达式的类型行为,使得我们可以方便地获取异步操作最终返回的类型。
  2. 【回答框架 2】其实现基于条件类型和递归:如果 T 是 thenable(具有 then 方法),则等待其类型参数,直到得到非 thenable 的最终类型。同时,如果 T 是 null 或 undefined,则保持原样,因为 await 对 null 和 undefined 不会展开。
  3. 【回答框架 3】实际应用:例如,在封装异步函数时,可以使用 Awaited<ReturnType<typeof fetch>> 来获取 fetch 返回的 Promise 最终解析值的类型,而无需手动定义接口。它也常用于泛型约束和类型推断,简化复杂 Promise 类型的处理。
  4. 【回答框架 4】注意事项:Awaited 仅提取值类型,不影响运行时行为,它只是编译期类型层面的工具。同时,它不处理 thenable 中的错误类型,需要配合异常处理机制。
  5. 【关键点 1】Awaited<T> 用于递归提取 Promise 或 thenable 的最终值类型,模拟 await 的类型行为。
  6. 【关键点 2】它适用于嵌套 Promise 和 thenable 对象,处理 null 和 undefined 时不做展开。
  7. 【关键点 3】常用于类型推断和泛型编程,例如获取异步函数返回的最终类型。
  8. 【易错点 1】误以为 Awaited 会影响运行时行为,实际上它只作用于编译期类型。
  9. 【易错点 2】忽略非 Promise 但为 thenable 的对象,导致类型提取不准确。
  10. 【易错点 3】在较旧版本的 TypeScript 中使用 Awaited 导致编译错误,需确保 TypeScript 版本高于 4.5。