使用泛型类型参数作为参数
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<T>()
我不确定 get() 方法是否接受类型:您传递给它的不是 Typescript 接口,而是编译为对象的 Typescript 类。跨度>
@pietro909:当你认为类实际上是函数时,你可以说 get() 接受函数作为参数。 get() 以提供的类型作为参数在字典集合中查找键值。
【参考方案1】:
Typescript 中的泛型只是设计时的。在某些 JS 替换中永远不会编译。但是您尝试做的实际上是使用泛型,期望它们在 javscript 中编译。
换句话说,T
不存在。它只为你增强。您不能将其作为变量传递,因为它不是变量。正如我所说,这完全是虚构的。
所以GetInstance
方法必须调用具有实际值的get
函数,而不是T
,因为它不存在。
【讨论】:
以上是关于使用泛型类型参数作为参数的主要内容,如果未能解决你的问题,请参考以下文章
将实例化的 System.Type 作为泛型类的类型参数传递
Kotlin泛型总结 ★ ( 泛型类 | 泛型参数 | 泛型函数 | 多泛型参数 | 泛型类型约束 | 可变参数结合泛型 | out 协变 | in 逆变 | reified 检查泛型参数类型 )