关于泛型的问题:Typescript generics: Argument of type 'X' is not assignable to parameter of type 'T':
以下代码中的 get list()
和protected _list
被添加到每个类中,只是为了拥有正确的类型。但是,当编译为JavaScript时,这三个方法和类属性在所有三个类中都是相同的。有没有办法告诉Typescript编译器跳过重复项并只在ClassA中保留一个getter / class属性?
class ClassA {
protected _list:Array<BlueItem>;
get list(): Array<BlueItem> {
return this._list;
}
}
class ClassB extends ClassA {
protected _list:Array<GreenItem>;
get list(): Array<GreenItem> {
return this._list;
}
}
class ClassC extends ClassB {
protected _list:Array<RedItem>;
get list(): Array<RedItem> {
return this._list;
}
}
class BlueItem {
}
class GreenItem extends BlueItem {
}
class RedItem extends BlueItem {
}
答案 0 :(得分:1)
我认为你可以使用
在打字稿中解决它class ClassA<T = BlueItem> {
protected _list:Array<T | BlueItem>;
get list(): Array<T | BlueItem> {
return this._list;
}
}
class ClassB<T = GreenItem> extends ClassA<T | GreenItem> {
}
class ClassC extends ClassB<RedItem> {
}
这不是100%等效,你可以通过限制泛型类型来扩展BlueItem或GreenItem来进一步改变它,...