【发布时间】:2017-02-16 11:46:54
【问题描述】:
所以我对 Typescript 和泛型还很陌生。我不确定我是否发现了 Typescript 的错误/限制,或者我错过了正确的模式来做我想做的事。
我有一个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"];
如何指定ArrayWidget 的泛型类实际上是<T> 的数组?目前我必须像这样明确地转换:
this.value = v as U;
一切都很顺利(消费代码按预期工作)。谢谢!
【问题讨论】:
标签: generics typescript typescript1.8