新属性无法在派生类构造函数中实例化

时间:2017-12-17 18:36:44

标签: typescript

我在TS游乐场尝试这段代码并遇到了这个奇怪的事情

class Animal {
    constructor(public name: string) {
        this.name = name;
     }
}

    class Snake extends Animal {
        constructor(name: string, isPoisonous: boolean) {
            super(name);
            this.isPoisonous= isPoisonous;
        }
    }

当我在isPoisonous构造函数中引入Snake属性时,TS对我大喊'Property 'isPoisonous' does not exist on type 'Snake''。有趣的是,ES6中的相同内容编译得很好。

1 个答案:

答案 0 :(得分:0)

您需要设置访问级别(即public),以便将某些内容设置为类变量,而不仅仅是构造函数的参数。因此,在值之前添加public可以解决您的问题。

那就是说,作为一种风格问题,向前宣告这些属性可能更好:

class Animal {
  public name : string;

  constructor(public name: string) {
    this.name = name;
  }
}

class Snake extends Animal {
  public isPoisonous : boolean;

  constructor(name: string, isPoisonous: boolean) {
    super(name);
    this.isPoisonous = isPoisonous;
  }
}