TypeScript Academy · Урок

Promise<T>, типизация async/await

Разберитесь со структурами Promise , аннотируйте асинхронные функции и безопасно работайте с полученными после ожидания значениями.

Урок 1 из 38 шагов

«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 — локальная установка не требуется.

Все уроки этого курса

  1. Promise , типизация async/await
  2. Типизация ошибок (unknown), сужение типов в catch
  3. Шаблоны конкурентного выполнения (all/settled/race): типы
← Назад к TypeScript Academy