我正在尝试为我的类使用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
};
}
}
有没有人能解决这个问题?
答案 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
是已经合法的,所以如果这是你试图启用的行为,你根本不需要泛型。