派生类字段无法自动完成

问题描述 投票:0回答:1

https://www.typescriptlang.org/play/?#code/MYGwhgzhAECCA8AVaBTAHgFxQOwCYwCUVgB7AJ13ggzIEtsBzAGmgFdsBrbEgd2wD5+0AN4AoaNGpgsAfgBc0RAG5xklBgDKGaSmgBeaAAoADmaceIEmFwKACmDIZaYEE n4BKfUOEBfUX9FQSBgAIVRMHHw4eGFoMAVsVgBbACMUMh9vVSksfREJPwkSbABhEFpgDjyMAAtaCAA6CHUTHUNYn3d-UR7RIA

enter image description here

class A<T extends Record<string, unknown>> {
  state?: T;
}

class B extends A<{ a: number}> {
  state = { /** cannot autocomplete */ }
}
typescript visual-studio-code
1个回答
0
投票

这里发生的事情是,有两个名为

state
的属性(一个在父类中,一个在子类中),所以理论上这意味着您可以根据需要在子类中创建该属性,但作为其value 将用于覆盖父类中的值 TypeScript 需要它们具有相同的类型。

所以这里没有自动补全,因为当您在子类中创建属性时,它与父类中的属性没有直接链接。

为了防止此类问题,您可以使用

this.state

在子类的构造函数中赋值
class B extends A<{ a: number}> {
  constructor() {
    super()
    this.state = { /** there is autocompletion here */ }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.