Напиши тип Middle Дженерики обновлено

Тип результата Promise.all

Вопрос

Какой тип получится? Впишите тип.

async function load() {
  const r = await Promise.all([Promise.resolve(1), 'a']);
  return r; // r: /* ? */
}

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

Напишите тип, как написали бы в коде.

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

Коротко

Правильный тип: [number, string]. Promise.all типизирован через mapped-тип по кортежу: { -readonly [P in keyof T]: Awaited<T[P] }.

Правильный тип

[number, string]

Разбор

Promise.all типизирован через mapped-тип по кортежу: { -readonly [P in keyof T]: Awaited<T[P]> }. Массивный литерал в аргументе выводится как кортеж, поэтому получаем [number, string], а не (string | number)[]. Awaited разворачивает промисы, а не-промисы оставляет как есть. Литерал 'a' расширяется до string, потому что элемент массива изменяемый.

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

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

Термины по теме