Утилітний тип awaited у TypeScript
Awaited — це утилітний тип у TypeScript, введений у версії 4.5, який витягує значення з проміса. Якщо функція або змінна повертає 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 дозволяє явно вказувати тип результату, отриманого після очікування проміса, спрощуючи типізацію та зменшуючи дублювання. 2. Рекурсивне витягування типів
При роботі з вкладеними промісами Awaited автоматично "розгортає" вкладені типи, повертаючи фінальне значення. 3. Підтримка асинхронних утиліт
Awaited корисний при створенні загальних утиліт для асинхронного коду, де важливо знати точний тип даних після розв'язання проміса.
Обмеження
- Якщо тип
Tне є промісом, Awaited просто повертаєTбез змін. - У випадку складних умовних типів або загальних функцій може знадобитися більш ретельний опис типу для коректного виведення.
Підсумок
Awaited — це потужний утилітний тип, який дозволяє автоматично витягувати типи значень з промісів. Він особливо корисний для асинхронного програмування в TypeScript, забезпечуючи точну типізацію повернених даних та спрощуючи роботу з вкладеними промісами.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.