You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中Awaited类型是什么?请详解其用途与工作原理

Awaited工具类型详解

什么是Awaited

TypeScript 4.5及以后新增的Awaited<T>工具类型,核心作用是提取Promise包裹的最终返回类型,同时能递归处理嵌套的Promise(比如Promise<Promise<T>>),模拟await操作在类型层面的行为。

工作原理

它的底层实现逻辑类似:

type Awaited<T> = 
  T extends null | undefined ? T : // 处理null/undefined
  T extends PromiseLike<infer U> ? Awaited<U> : // 递归解析Promise
  T; // 非Promise类型直接返回自身

简单说就是通过条件类型的infer关键字,逐层提取Promise内部的类型,直到拿到最底层的非Promise类型。

核心用途

1. 提取Promise的返回类型

当你需要明确某个Promise函数最终返回的具体类型时,不用手动写嵌套的Promise内部类型:

// 示例函数
async function fetchData(): Promise<{ id: number; name: string }> {
  return { id: 1, name: "test" };
}

// 提取返回类型
type FetchResult = Awaited<ReturnType<typeof fetchData>>;
// 等价于 type FetchResult = { id: number; name: string }

2. 处理嵌套Promise

现实中可能遇到多层嵌套的Promise(比如第三方库返回的Promise<Promise<T>>),Awaited能自动递归解析:

type NestedPromise = Promise<Promise<number>>;
type Unwrapped = Awaited<NestedPromise>;
// 等价于 type Unwrapped = number

3. 处理联合类型的Promise

如果是多个Promise组成的联合类型,Awaited会逐个解析后再返回联合类型:

type MixedPromises = Promise<string> | Promise<number>;
type UnwrappedMixed = Awaited<MixedPromises>;
// 等价于 type UnwrappedMixed = string | number

4. 模拟await的类型行为

在类型层面模拟await操作的效果,比如写工具函数的时候,明确异步操作后的类型:

function handleAsync<T>(input: Promise<T>): Awaited<T> {
  return input.then(res => res) as Awaited<T>;
}

常见误区

  • 不要把它和ReturnType混淆:ReturnType是提取函数的返回类型(如果函数返回Promise,那它拿到的是Promise<T>),而Awaited是进一步提取Promise内部的T。
  • 它只处理PromiseLike类型(只要有then方法的类型都能被解析),不是Promise的类型会直接返回自身:
type NonPromise = Awaited<string>;
// 等价于 type NonPromise = string

内容的提问来源于stack exchange,提问作者Bablu Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:20:49