zeroin
zeroin

Reputation: 6025

Tell typescript compiler not to compile some of the code

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

Answers (1)

peter
peter

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

Related Questions