Typescript: оценить тип функции generi c - PullRequest
7 голосов
/ 27 марта 2020

Есть ли уловка, чтобы «оценить» тип генерика c fuction?

Рассмотрим следующее:

type Arr = <A>() => A[]

type Ev<G, A> = ???

Вопрос: Это можно заполнить ??? так, чтобы Ev<Arr, A> равнялось () => A[]? (По сравнению с <A>() => A[])


Еще несколько примеров желаемого поведения:

Ev<<A>() => A[], number>
    // should evaluate to
    // () => number[]

Ev<<A>() => string, number>
    // should evaluate to
    // () => string

Ev<<A>() => [string, A], { some: "thing" }>
    // should evaluate to
    // () => [string, { some: "thing" }]

Упрощенная версия вопроса будет такой: Можем ли мы определить

type EvNum<A> = ???

такой, что

EvNum<
   <X>() => X
> // should be `number`

EvNum<
   <X>() => X[]
> // should be `number[]`

EvNum<
   <X>() => [X, "hi"]
> // should be `[number, "hi"]`

EvNum<
   <X>() => SomeGenericType<X>
> // should be `SomeGenericType<number>`

EvNum<
   <X>() => "constant"
> // should be `"constant"`

1 Ответ

0 голосов
/ 06 апреля 2020

Если я вас правильно понимаю, это должно быть:

type EV<T> = () => T;

В противном случае вопрос не имеет смысла или должен быть объяснен более подробно.

...