Так что я довольно новичок в TypScript, а также дженериках. Я не уверен, нашел ли я ошибку/ограничение TypScript или мне не хватает правильного шаблона, чтобы делать то, что я хочу.Общие классы, ограничения и наследование
У меня есть базовый класс Widget
, который содержит значение типа T
. Например, это может быть string
, number
, что угодно.
Я хочу иметь Widget
подкласс, который будет держать Array<T>
в качестве значения, например string[]
, Date[]
и т.д.
Примера потребительского кода:
let w = new Widget<string>();
w.value = "abc";
let aw = new ArrayWidget<number[]>();
aw.value = [1, 2, 3];
Ближайшего я пришел это:
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"];
Как я могу чертежу ify, что общий класс ArrayWidget
- это массив из <T>
? В настоящее время я должен быть явно подобран следующим образом:
this.value = v as U;
И все доволен (код потребления работает должным образом). Благодаря!