如何获取泛型类型并让以下代码运行?
class ServiceRepository implements IServiceCollection {
private col = new A4Lib.Collections.Dictionary<any, any>();
public addSingleton<T>(service:T) {
this.col.setValue(<T>service, service);
}
public getService<T>(): T {
if (this.col )
{
return <T>this.col.getValue(T); //error
}
}
}
答案 0 :(得分:0)
TypeScript有一个名为&#34; type erasure&#34;这意味着在编译期间删除了类型信息。这意味着类型annotactions,接口,类型参数和泛型不会在运行时存在。
你必须实现你的代码,以便它可以在运行时切换一些具体的东西,一个简单的答案就是使用字符串名称:
class ServiceRepository implements IServiceCollection {
private col = new A4Lib.Collections.Dictionary<string, any>();
public addSingleton<T>(name, service: T) {
this.col.setValue(name, service);
}
public getService<T>(name: string): T {
if (this.col) {
return <T>this.col.getValue(name); //error
}
}
}