告诉typescript编译器不要编译一些代码

时间:2017-09-06 12:30:06

标签: typescript

关于泛型的问题: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 {

}

1 个答案:

答案 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来进一步改变它,...