Alexandroppolus
@Alexandroppolus
кодир

Как убедить тайпскрипт, что unknown можно в ReturnType?

Всем привет.
Картина маслом (и сыром):
function call<F extends () => unknown>(f: F): ReturnType<F> {
  return f()
}

Казалось бы, в чем проблема? Но увы, "TS2322: Type 'unknown' is not assignable to type 'ReturnType '" на строке с return.

Если заменить unknown на любой другой тип, тоже ругается. И только богомерзкое any, а так же бесполезное в данной ситуации never возвращаются без ошибок.

Выглядит так, будто ReturnType забывает, что он по сути возвращаемое значение для f. Чего это он?
  • Вопрос задан
  • 141 просмотр
Пригласить эксперта
Ответы на вопрос 2
bingo347
@bingo347 Куратор тега TypeScript
Crazy on performance...
У TypeScript есть ряд проблем с функциональными типами в дженериках из-за их вариантности
Вот так результат будет аналогичным, но работает без проблем:
function call<R>(f: () => R): R {
  return f()
}
Ответ написан
Kozack
@Kozack
Thinking about a11y
Первое что пришло в голову:
return f() as ReturnType<F>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы