如何获得泛型类型并让以下代码运行?

时间:2017-06-19 09:49:02

标签: typescript generics

如何获取泛型类型并让以下代码运行?

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 

        }
    }
}

1 个答案:

答案 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 
        }
    }
}