泛型类中的数组属性的实例?

时间:2017-12-12 12:35:50

标签: angular typescript generics

我有一个泛型类的打字稿,有2个属性为 -

export class WrapperModel<T>{
    constructor(private testType: new () => T) {
        this.getNew();
    }

    getNew(): T {
        return new this.testType();
    }
    public Entity: T;
    public ShowLoading: boolean;
}

然后按如下方式使用 -

this.userModel = new WrapperModel<UserProfileModel>(UserProfileModel);

我假设它正在构造函数中创建类型为UserProfileModel的实例。

但是当我尝试使用Array type属性时,它会失败。就像我一样 -

this.userModel = new WrapperModel<Array<UserProfileModel>>(Array<UserProfileModel>);

我在上面的案例中得到的错误 -

enter image description here

是否我无法在泛型或其他内容中创建Array属性的实例。 我的需要很简单;我想在Generic类中创建Array属性的实例。

1 个答案:

答案 0 :(得分:1)

问题在于,在运行时泛型被擦除,因此Array<UserProfileModel>实际上不是构造函数,Array是构造函数,因此您可以编写:

var userModel = new WrapperModel<Array<UserProfileModel>>(Array);

这适用于任何泛型类型,而不仅仅是数组:

class Generic<T> {  }
var other = new WrapperModel<Generic<UserProfileModel>>(Generic);

通常对于泛型类,似乎没有办法获取特定类型实例化的构造函数,只有通用构造函数:

// Valid, new get a generic constrcutor
var genericCtor: new <T>() => Generic<T> = Generic;

// Not valid,  Generic<UserProfileModel> is not callable
var genericCtor: new () => Generic<UserProfileModel> = Generic<UserProfileModel>;