Reputation: 6025
Following this question about Generics: Typescript generics: Argument of type 'X' is not assignable to parameter of type 'T' :
get list()
and protected _list
in the following code are added to each class just to have a proper type. However, when compiled to JavaScript these methods and class property are identical in all three classes. Is there a way to tell Typescript compiler to skip duplicates and leave one getter/class property in ClassA only?
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 {
}
Upvotes: 0
Views: 90
Reputation: 15149
I think you can solve it in typescript using
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> {
}
This is not 100% equivalent, you could change it further by restricting the generic type to need to extend BlueItem or GreenItem, ...
Upvotes: 1