2017-12-12 2 views
0

Ich habe eine generische Klasse von Typoskript mit 2 Eigenschaften -Instanz der Array-Eigenschaft in der generischen Klasse?

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

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

mit ihm dann wie folgt -

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

ich gehe davon ist eine Instanz vom Typ UserProfileModel in seinem Konstruktor zu erstellen.

Aber wenn ich mit Array-Eigenschaft versuchen, dann schlägt es fehl. Wie, wenn ich -

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

Der Fehler, den ich in obigem Fall erhalten -

enter image description here

es ist, kann ich nicht eine Instanz von Array-Eigenschaft in Generika oder etwas anderes schaffen. Mein Bedürfnis ist einfach; Ich möchte Instanz von Array Eigenschaften in generischer Klasse erstellen.

Antwort

1

Das Problem ist, dass die zur Laufzeit Generika gelöscht werden, so Array<UserProfileModel> ist nicht wirklich eine Konstruktorfunktion ist Array die Konstruktor-Funktion, so dass Sie schreiben:

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

Dies gilt für alle generischen Typen, nicht nur Array:

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

Allgemeinen für eine generische Klasse eine Möglichkeit nicht, scheint es zu sein, einen Konstruktor für bestimmte Typ Instanziierung zu bekommen, nur der allgemeine Konstruktor:

// 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>; 
+0

Es funktionierte dank. Ist es nur pass 'typeof' Argument für alle generischen Typen? – Manoj

+0

Sorry nicht sicher, ich verstehe die Frage –

+0

Ich wollte sagen, was passiert, wenn ich nur Art von Argument übergeben als - 'this.userModel = neues WrapperModel (Objekt)' <- 'Objekt' wird seit dem Typ übergeben Argument wird entfernt oder? – Manoj

Verwandte Themen