Promise<T>, типизация async/await
Разберитесь со структурами Promise , аннотируйте асинхронные функции и безопасно работайте с полученными после ожидания значениями.
«Promise<T>, типизация async/await» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 1 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 3 уроков всего.
Введение
Цель: читать и писать код на основе Promise<T>. Вы будете типизировать асинхронные функции, получать значения с помощью await и сохранять типизацию ошибок.
Основы Promise
Promise<T> оборачивает значение, которое будет получено в будущем. Используйте Promise, когда значение не возвращается.
function delay(ms: number): Promise<void> {
return new Promise(resolve => setTimeout(resolve, ms));
}
const p: Promise<void> = delay(100);
p.then(() => console.log("done"));Типизация возвращаемого значения async-функции
Функции async всегда возвращают Promise<U>. Тело функции возвращает U, а TS автоматически оборачивает его.
async function fetchNumber(): Promise<number> {
await delay(10);
return 42; // inferred as Promise<number>
}
fetchNumber().then(n => console.log(n.toFixed(0)));Типизация await
await извлекает значение из Promise и возвращает внутренний тип (здесь — string), поэтому IntelliSense работает корректно.
async function readUserName(id: number): Promise<string> {
await delay(5);
return `user-${id}`;
}
async function main(): Promise<void> {
const name = await readUserName(7); // name: string
console.log(name.toUpperCase());
}
main();Типизация Promise.all
Promise.all сохраняет типы кортежа; каждый элемент автоматически преобразуется из Promise во внутренний тип.
async function both() {
const [n, s] = await Promise.all([
fetchNumber(),
readUserName(1),
]);
console.log(n, s);
}
both();Типизация ошибок
В блоке catch отдавайте предпочтение типу unknown. Сначала уточните тип с помощью instanceof Error (или пользовательских проверок), а затем обращайтесь к полям.
async function safe() {
try {
await delay(1);
throw new Error("boom");
} catch (e: unknown) {
if (e instanceof Error) {
console.error("Handled:", e.message);
} else {
console.error("Unknown error", e);
}
}
}
safe();Проверка возвращаемого типа async-функции
Быстрая проверка: каков возвращаемый тип async-функции, которая возвращает значение типа U?
Итоги
Итоги: Promise<T> оборачивает будущие значения, функции async возвращают Promise<U>, await извлекает внутренние типы, а ошибки в блоке catch следует изначально считать типом unknown.
Изучай TypeScript с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 101
- Уроки
- 352
Часто задаваемые вопросы
Урок «Promise<T>, типизация async/await» бесплатный?
Да — полный текст урока «Promise<T>, типизация async/await» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 3 уроков всего.
Чему я научусь в уроке «Promise<T>, типизация async/await»?
Разберитесь со структурами Promise , аннотируйте асинхронные функции и безопасно работайте с полученными после ожидания значениями. Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать TypeScript Academy?
Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 3.
Сколько времени занимает урок «Promise<T>, типизация async/await»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке TypeScript Academy?
Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Promise , типизация async/await
- Типизация ошибок (unknown), сужение типов в catch
- Шаблоны конкурентного выполнения (all/settled/race): типы