[英]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.