使用泛型类型参数作为参数

Posted

技术标签:

【中文标题】使用泛型类型参数作为参数【英文标题】:Using generic type parameter as parameter 【发布时间】:2016-09-28 06:44:20 【问题描述】:

我正在尝试创建一个通用函数,它使用any 类型参数调用另一个函数。这是我尝试过的:

static GetInstance<T>(): T 
        return <T>injector.get(T); // get(param: any): any
    

问题是这不能编译。我收到Cannot find name 'T' 错误。

我试过get(typeof T),但typeof T是字符串"function"

我能做什么?

为了澄清:get() 方法接受类型。例如,您可以像这样使用它:

import  MyService  from '..'

constructor()
    let val = this.injector.get(MyService);

【问题讨论】:

您不能使用类型作为值。如果你需要传入类型,你应该这样做:get&lt;T&gt;() 我不确定 get() 方法是否接受类型:您传递给它的不是 Typescript 接口,而是编译为对象的 Typescript 类。跨度> @pietro909:当你认为类实际上是函数时,你可以说 get() 接受函数作为参数。 get() 以提供的类型作为参数在字典集合中查找键值。 【参考方案1】:

Typescript 中的泛型只是设计时的。在某些 JS 替换中永远不会编译。但是您尝试做的实际上是使用泛型,期望它们在 javscript 中编译。

换句话说,T 不存在。它只为你增强。您不能将其作为变量传递,因为它不是变量。正如我所说,这完全是虚构的。

所以GetInstance 方法必须调用具有实际值的get 函数,而不是T,因为它不存在。

【讨论】:

以上是关于使用泛型类型参数作为参数的主要内容,如果未能解决你的问题,请参考以下文章