Компилятор TypeScript не видит typeof foo
как универсальный тип.Я бы сказал, что это ошибка в компиляторе.
Тем не менее, TypeScript имеет вызываемые интерфейсы , которые могут быть общими без каких-либо проблем, поэтому, если вы вводите вызываемый интерфейс, совместимый с подписью вашегоФункция, вы можете реализовать свой собственный эквивалент ReturnType
, например:
function foo<T>(x: T): T {
return x;
}
interface Callable<R> {
(...args: any[]): R;
}
type GenericReturnType<R, X> = X extends Callable<R> ? R : never;
type N = GenericReturnType<number, typeof foo>; // number