我有一个泛型类的打字稿,有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>);
我在上面的案例中得到的错误 -
是否我无法在泛型或其他内容中创建Array属性的实例。
我的需要很简单;我想在Generic类中创建Array
属性的实例。
答案 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>;