J'ai une classe générique et j'ai besoin de créer une instance de avec quelques arguments. J'ai trouvé comment créer une instance avec un constructeur vide, mais quand j'essaye de la surcharger je reçois une erreur: 'ERROR TypeError: rowObj n'est pas un constructeur'Comment créer une instance de <T> avec des arguments en tapuscrit?
Voici l'ancien code qui fonctionne (mais avec un constructeur vide) :
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);
});
}
}
}
Voici le nouveau code, je suis en train de faire le travail:
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);
});
}
}
}
Qu'est-ce qu'un 'DataTableRowViewModel' et quelle est la signature de son constructeur? – jcalz
@jcalz c'est juste une classe vide pour le moment, sans constructeur déclaré – Igor