Typescript ReturnType универсальной функции - PullRequest
0 голосов
/ 14 мая 2018

Новый ReturnType в TypeScript 2.8 - это действительно полезная функция, которая позволяет извлекать тип возврата определенной функции.

function foo(e: number): number {
    return e;
}

type fooReturn = ReturnType<typeof foo>; // number

Однако у меня возникают проблемы с использованием его в контексте общих функций.

function foo<T>(e: T): T {
    return e;
}

type fooReturn = ReturnType<typeof foo>; // type fooReturn = {}

type fooReturn = ReturnType<typeof foo<number>>; // syntax error

type fooReturn = ReturnType<(typeof foo)<number>>; // syntax error

Есть ли способ извлечь возвращаемый тип, который бы универсальной функции дал параметры определенного типа?

1 Ответ

0 голосов
/ 14 мая 2018

Компилятор 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...