Skip to content

Awaited<Type> ​

INFO

The Awaited<Type> utility type is available starting from TypeScript version 4.5. For more information see in TypeScript Handbook, Release Note.

Overview ​

Awaited<Type> is a built in utility type in TypeScript that extracts the type of a value that a Promise resolves to. It is particularly useful when working with asynchronous operations where you need to determine the final result type after resolved.

Syntax ​

It takes one type parameter, which is the Type representing the Promise from which you want to extract the resolved type.

Examples ​

Example #1 ​

ts
type A = Awaited<Promise<string>>;
// type A = string

type B = Awaited<Promise<Promise<number>>>;
// type B = number

type C = Awaited<boolean | Promise<number>>;
// type C = boolean | number

Example #2 ​

ts
async function nestedPromise(): Promise<Promise<boolean>> {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(
        new Promise<boolean>(resolve => {
          setTimeout(() => {
            resolve(true);
          }, 1000);
        })
      );
    }, 1000);
  });
}

type NestedPromise = Awaited<ReturnType<typeof nestedPromise>>;
// type NestedPromise = boolean

type NestedPromiseWithoutAwaited = ReturnType<typeof nestedPromise>;
// type NestedPromiseWithoutAwaited = Promise<Promise<boolean>>

Example #3 ​

ts
interface User {
  id: number;
  name: string;
  age: number;
}

class UserApiService {
  async fetchUser(userId: number): Promise<User> {
    // Fetch the user data from the database.
    // The actual implementation might look like this:
    // const response = await fetch(`/api/user/${userId}`);
    // const data = response.json();
    // return data;

    return { id: 1, name: 'John Doe', age: 30 };
  }
}

type FetchedUser = Await<ReturnType<UserApiService['fetchUser']>>;

async function handleUserData(apiService: UserApiService, userId: number) {
  try {
    const user: FetchedUser = await apiService.fetchUser(userId);
    // After fetching user data, you can perfrom various actions such as
    // updating the user interface, caching the data for future user,
    // or making additional API requests as needed.
  } catch (error) {
    // error handling
  }
}

const userApiService = new UserApiService();
handleUserData(userApiService, 1);