如何创建<;的实例;T>;在typescript中使用参数?

如何创建<;的实例;T>;在typescript中使用参数?,typescript,generics,templating,Typescript,Generics,Templating,我有一个泛型类,需要创建一个带有一些参数的实例。我找到了如何使用空构造函数创建实例,但当我尝试重载它时,我得到一个错误:“error TypeError:rowObj不是构造函数” 以下是旧代码(但构造函数为空): 导出类DataTableViewModel{ 公共行视图模型:TRow[]; 公共总计项目:编号; 构造函数(dateService:dateService,行?:任意[]){ this.rowsViewModel=[]; 如果(行){ rows.forEach((row)=>{ 设

我有一个泛型类,需要创建一个带有一些参数的实例。我找到了如何使用空构造函数创建实例,但当我尝试重载它时,我得到一个错误:“error TypeError:rowObj不是构造函数”

以下是旧代码(但构造函数为空):

导出类DataTableViewModel{
公共行视图模型:TRow[];
公共总计项目:编号;
构造函数(dateService:dateService,行?:任意[]){
this.rowsViewModel=[];
如果(行){
rows.forEach((row)=>{
设obj=Object.getPrototypeOf(Object.create(row)为TRow);
这个.rowsViewModel.push(obj);
});
}
}
}
以下是我正在努力实现的新代码:

export abstract class DataTableViewModel<TRow extends DataTableRowViewModel> {
public rowsViewModel: TRow[];
public totalItemsCount: number;

constructor(dateService: DateService, rows?: { new(): any }[]) {
    this.rowsViewModel = [];
    if (rows) {
        let rowObj: { new(dateService: DateService, rows?: any): TRow };
        rows.forEach((row) => {
            let obj = new rowObj(dateService, row);
            this.rowsViewModel.push(obj);
        });
    }
}
}
导出抽象类DataTableViewModel{
公共行视图模型:TRow[];
公共总计项目:编号;
构造函数(dateService:dateService,行?:{new():any}[])){
this.rowsViewModel=[];
如果(行){
让rowObj:{new(dateService:dateService,rows?:any):TRow};
rows.forEach((row)=>{
设obj=newrowobj(日期服务,行);
这个.rowsViewModel.push(obj);
});
}
}
}

您已经声明了一个变量
rowObj
,但尚未初始化它。您需要为它分配一个构造函数,并且您必须安排从某处获取该构造函数

不能只创建
TRow
对象:该名称仅存在于编译时类型空间中,在运行时不存在。在某个地方,你必须有一个你可以调用的具体对象。例如,您可以将其作为另一个参数添加到构造函数中:

export class DataTableViewModel<TRow extends DataTableRowViewModel> {
public rowsViewModel: TRow[];
public totalItemsCount: number;

constructor(dateService: DateService, rows?: any[]) {
    this.rowsViewModel = [];
    if (rows) {
        rows.forEach((row) => {
            let obj = Object.getPrototypeOf(Object.create(row) as TRow);
            this.rowsViewModel.push(obj);
        });
    }
}
}
export abstract class DataTableViewModel<TRow extends DataTableRowViewModel> {
    public rowsViewModel: TRow[];
    public totalItemsCount: number;

    constructor(rowObj: { new(dateService: DateService, rows?: any): TRow },
     dateService: DateService, rows?: { new(): any }[]) {
        this.rowsViewModel = [];
        if (rows) {
            rows.forEach((row) => {
                let obj = new rowObj(dateService, row);
                this.rowsViewModel.push(obj);
            });
        }
    }
}
导出抽象类DataTableViewModel{
公共行视图模型:TRow[];
公共总计项目:编号;
构造函数(rowObj:{new(dateService:dateService,rows?:any):TRow},
dateService:dateService,行?:{new():any}[]{
this.rowsViewModel=[];
如果(行){
rows.forEach((row)=>{
设obj=newrowobj(日期服务,行);
这个.rowsViewModel.push(obj);
});
}
}
}

什么是
DataTableRowViewModel
及其构造函数的签名是什么?@jcalz目前它只是一个空类,没有任何声明的构造函数库,但之后如何使用它?作为第一个参数应该传递什么?您需要传入一些实现抽象类的具体类。