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

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,因为它不存在。

【讨论】:

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

将实例化的 System.Type 作为泛型类的类型参数传递

Java 泛型方法泛型类通配符通配符上下限

Kotlin泛型总结 ★ ( 泛型类 | 泛型参数 | 泛型函数 | 多泛型参数 | 泛型类型约束 | 可变参数结合泛型 | out 协变 | in 逆变 | reified 检查泛型参数类型 )

java中如何得到泛型参数的class?

javapoet添加泛型参数问题,怎么解决

泛型类中未使用的类型参数