Also ich bin ziemlich neu in Typescript und auch Generika. Ich bin mir nicht sicher, ob ich einen Fehler/eine Einschränkung von Typescript gefunden habe oder dass mir das richtige Muster fehlt, um das zu tun, was ich will.Generische Klassen, Constraints und Vererbung
Ich habe eine Widget
generische Basisklasse, die einen Wert des Typs T
enthält. Zum Beispiel könnte es string
, number
, was auch immer sein.
ich eine Widget
Unterklasse haben wollen, die einen Array<T>
als Wert halten wird, zB string[]
, Date[]
usw.
Beispiel Verbrauchercode:
let w = new Widget<string>();
w.value = "abc";
let aw = new ArrayWidget<number[]>();
aw.value = [1, 2, 3];
Die nächstgelegene ich gekommen bin, ist dies:
class Widget<T> {
public value:T;
}
class ArrayWidget<U extends T[], T> extends Widget<U> {
setValue() {
let v = new Array<T>();
this.value = v; // error: Type 'T[]' is not assignable to type 'U'
}
}
let aw = new ArrayWidget<string[], string>();
aw.value = ["a", "b", "c"];
Wie kann ich spec ify das ArrayWidget
's generische Klasse ist eigentlich ein Array von <T>
? Zur Zeit muss ich explizit wie folgt gießen:
this.value = v as U;
Und alles ist glücklich (der Verbrauchercode funktioniert wie erwartet). Vielen Dank!