class A<T extends Record<string, unknown>> {
state?: T;
}
class B extends A<{ a: number}> {
state = { /** cannot autocomplete */ }
}
这里发生的事情是,有两个名为
state
的属性(一个在父类中,一个在子类中),所以理论上这意味着您可以根据需要在子类中创建该属性,但作为其value 将用于覆盖父类中的值 TypeScript 需要它们具有相同的类型。
所以这里没有自动补全,因为当您在子类中创建属性时,它与父类中的属性没有直接链接。
为了防止此类问题,您可以使用
this.state
在子类的构造函数中赋值
class B extends A<{ a: number}> {
constructor() {
super()
this.state = { /** there is autocompletion here */ }
}
}