繁体   English   中英

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

[英]TypeScript Generic Classes: Cannot assign to Generic Type Variable

我正在尝试为我的班级使用通用接口。 我的班级有一个可扩展接口的通用类型和一个具有该类型的类变量。 但是,一旦我尝试为该变量赋值,编译器就会给我一个错误(示例:A类)

当我不扩展泛型类型时,它将起作用。 (例如: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
        };
    }
}

有谁能解决这个问题?

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

    constructor() {
        this.state = { ...

您所说的是IState 扩展了 MyStateInterface 这意味着某人可以使用比MyStateInterface 更具体的类型实例化A 具体来说,有人可以添加新的必需属性:

interface MyCoolState extends MyStateInterface {
  required: string;
}
let x = new A<MyCoolState>();

发生这种情况时,您的构造函数代码通过使用缺少required的值初始化state打破MyCoolState的约定。

您如何解决此问题取决于您要执行的操作。 通常,当人们发现自己处在这种情况下时,正确的做法是根本不要泛型-子类使用派生性更高的类型覆盖state 已经是合法的,因此,如果这是您要尝试启用的行为,根本不需要泛型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM