Utility Type Awaited в TypeScript
Awaited — это утилитный тип в TypeScript, введённый в версии 4.5, который извлекает значение из Promise. Если функция или переменная возвращает Promise<T>, то Awaited<T> выдаст сам T.
Синтаксис
Awaited<T>
- T— тип, который может быть промисом или значением.
- Если Tявляется промисом (Promise<U>), тоAwaited<T>возвращает типU.
- Если T— не промис, тоAwaited<T>возвращает самT.
Пример использования
Пример 1. Достаём значение из промиса
async function getData(): Promise<number> {
  return 42;
}
type DataType = Awaited<ReturnType<typeof getData>>;
// DataType → number
В этом примере:
- Функция fetchDataвозвращаетPromise<number>.
- ReturnType<typeof fetchData>извлекает тип возвращаемого значения функции, т.е.- Promise<number>.
- Awaited<Promise<number>>распаковывает промис, возвращая тип- number.
Пример 2. Работа с вложенными промисами
type NestedPromise = Promise<Promise<string>>;
type Result = Awaited<NestedPromise>;
// Result → string
- Если промисов несколько, Awaited распаковывает их до конечного значения.
Зачем использовать Awaited?
- 
Упрощение работы с асинхронными функциями 
 Awaited позволяет явно указать тип результата, полученного после ожидания промиса, что упрощает типизацию и уменьшает дублирование.
- 
Рекурсивное извлечение типов 
 При работе с вложенными промисами Awaited автоматически «распаковывает» вложенные типы, возвращая конечное значение.
- 
Поддержка асинхронных утилит 
 Awaited полезен при построении обобщённых утилит для работы с асинхронным кодом, где важно знать точный тип данных после разрешения промиса.
Ограничения
- Если тип Tне является промисом, Awaited просто возвращаетTбез изменений.
- В случае сложных условных типов или обобщённых функций, может потребоваться более тщательное описание типов для корректного вывода.
Итог
Awaited — мощный утилитный тип, который позволяет автоматически извлекать тип значений из промисов. Он особенно полезен для асинхронного программирования в TypeScript, обеспечивая точную типизацию возвращаемых данных и упрощая работу с вложенными промисами.