1
私はTypescriptやジェネリックスをかなり使い慣れています。私はTypescriptのバグ/制限を見つけたかどうかわからない、または私が欲しいことをするのに正しいパターンがない。一般的なクラス、制約、継承
T
の値を保持するWidget
汎用基本クラスがあります。例えば、string
,number
などとすることができる。私は、その値としてArray<T>
を保持するWidget
サブクラスを持つようにしたい
、例えば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"];
そのArrayWidget
の汎用クラスは実際には<T>
の配列ですか?現在、私は明示的にキャストする必要があります:
this.value = v as U;
そしてすべてがうまくいきます(消費コードは期待通りに機能します)。ありがとう!