TypeScript通用类:无法分配给通用类型变量

时间:2016-12-08 17:11:10

标签: generics typescript compiler-errors

我正在尝试为我的类使用Generic接口。 My Class有一个泛型类型,它扩展了一个接口和一个带有该类型的类变量。但是一旦我尝试为该变量赋值,编译器就会给我一个错误。(例如:A类)

当我不扩展Generic Type时,它可以工作。 (例如:B类)

//Generic Classes problem
interface MyStateInterface {
    test?: number
}

class A<IState extends MyStateInterface> {
    protected state: IState;

    constructor() {
        // Error here
        this.state = {
            test: 1
        };
    }
}

class B<IState extends MyStateInterface> {
    protected state: MyStateInterface;

    constructor() {
        this.state = {
            test: 1
        };
    }
}

有没有人能解决这个问题?

1 个答案:

答案 0 :(得分:4)

url()

您所说的是class A<IState extends MyStateInterface> { protected state: IState; constructor() { this.state = { ... 扩展 IState。这意味着有人可以使用更具体的类型而不是MyStateInterface来实例化A。具体来说,有人可以添加新的必需属性:

MyStateInterface

如果发生这种情况,您的构造函数代码会通过使用缺少interface MyCoolState extends MyStateInterface { required: string; } let x = new A<MyCoolState>(); 的值初始化MyCoolState来中断state的合同。

你如何解决这个问题取决于你想要做什么。通常当人们发现自己处于这种情况时,正确的事情就是根本不是通用的 - 对于子类来说,使用更多派生类型覆盖required已经合法的,所以如果这是你试图启用的行为,你根本不需要泛型。