Выбор ответа Junior Утилитарные типы спрашивают часто обновлено
ReturnType и typeof
Вопрос
Почему строка не компилируется?
async function load(id: number) {
return id * 2;
}
type R = ReturnType<load>;
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: load это значение, а ReturnType ждёт тип: нужен typeof load. Утилиты принимают типы, а load это функция-значение.
Варианты ответа
loadэто значение, аReturnTypeждёт тип: нуженtypeof loadправильный ответ- Нужно указать аргументы вызова прямо в типе:
ReturnType<load(1)> ReturnTypeустарел для промисов, вместо него нуженAwaited<load>ReturnTypeне работает с асинхронными функциями, только с обычными
Разбор
Утилиты принимают типы, а load это функция-значение. В позиции типа его нужно превратить в тип через typeof: ReturnType<typeof load> даёт Promise<number>, а Awaited<ReturnType<typeof load>> даёт number.
С асинхронными функциями ReturnType работает, просто возвращает промис. Вызов внутри типа не пишут. ReturnType не устарел, Awaited решает другую задачу.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.