我是否应该在类的构造函数中定义基类方法的所有(潜在)属性?它可以在没有

时间:2018-07-30 10:16:40

标签: javascript typescript

如果我的基类包含这部分代码:

export default class OnScreenObject {
  constructor({ xPosition, yPosition }) {
    this.xPosition = xPosition;
    this.yPosition = yPosition;
  }

  draw() {
    this.ctx.translate(
      this.xPosition + this.width / 2,
      this.yPosition + this.height / 2,
    );
  }

我的子类构造函数包含以下部分代码:

export default class Zombie extends OnScreenObject {
  constructor({ xPosition, yPosition }) {
    super({ xPosition, yPosition });
    this.width = 15;
    this.height = 15;
  }

然后draw函数可以但VS Code中的打字稿检查器(我正在使用JS,而不是打字稿!)说:

Property 'width' does not exist on type 'OnScreenObject'.

这很有意义。

是我做错了代码,还是在某些问题上感到困惑,或者打字稿是书呆子?

1 个答案:

答案 0 :(得分:0)

也许我遗漏了一些东西,但是 OnScreenObject 类似乎缺少对所需属性的声明( x / yPosition 宽度,< strong> height )。似乎添加声明应该可以解决问题。

Check on playground

class OnScreenObject {

  protected xPosition: number;
  protected yPosition: number; 
  protected width: number;
  protected height: number;

  constructor({ xPosition, yPosition }) {
    this.xPosition = xPosition;
    this.yPosition = yPosition;
  }

  draw() {
    //...
  }
}

class Zombie extends OnScreenObject {

  constructor({ xPosition, yPosition }) {
    super({ xPosition, yPosition });
    this.width = 15;
    this.height = 15;
  }
}