Выбор ответа Junior Утилитарные типы обновлено

Awaited и вложенные промисы

Вопрос

Какой тип у X?

type X = Awaited<Promise<Promise<number>>>;

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: number. Awaited повторяет поведение await: распаковывает промисы рекурсивно, пока не дойдёт до значения, которое не является thenable.

Варианты ответа

  1. Promise<number>
  2. numberправильный ответ
  3. Promise<Promise<number>>
  4. unknown

Разбор

Awaited повторяет поведение await: распаковывает промисы рекурсивно, пока не дойдёт до значения, которое не является thenable. Поэтому из двойного промиса получается number. Так же типизирован результат Promise.all.

Promise<number> дала бы распаковка на один уровень, например через T extends Promise<infer V> ? V : T. unknown получился бы для thenable без явного типа.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.