打字稿:评估泛型函数的类型

Gar*_*art 8 typescript-generics typescript-typings typescript2.0

有什么技巧可以“评估”通用函数的类型吗?

考虑以下:

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

type Ev<G, A> = ???
Run Code Online (Sandbox Code Playgroud)

问:是否有可能来填补???这样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" }]
Run Code Online (Sandbox Code Playgroud)

问题的简化版本是:我们可以定义

type EvNum<A> = ???
Run Code Online (Sandbox Code Playgroud)

以至于

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"`
Run Code Online (Sandbox Code Playgroud)

Jan*_*ing 0

如果我理解正确的话应该是:

type EV<T> = () => T;
Run Code Online (Sandbox Code Playgroud)

否则这个问题就没有意义或者必须更详细地解释。